1

AngularJS で独自のディレクティブを宣言します。このディレクティブは、ファイルの文字列ソースを属性として取り、ロードしてから何らかの方法で変更して表示する必要があります。

次のように定義されたAngularJSディレクティブとフィルターがあります-

app.directive("customTag", function ($compile) {
    return {
        restrict: 'E',
        require: 'src',
        scope: {
            value: "=src"
        },
        template: '<div ng-bind-html-unsafe="value | myFilter"></div>',
        replace: true
    };
});
app.filter('myFilter', function () {
    return function (value) {
        $http({
            url: value,
            method: 'GET'
        }).success(function (data, status, headers, config) {
            value = data; // gets a string value
        }).error(function (data, status, headers, config) {
            value = "Error getting content";
        });
        return ModifyString(value);
    };
});

対応する HTML は -

<customTag src="/test.txt"></customTag>

$httpただし、これにより、 がスコープで定義されていないというエラーが表示されます。これを修正するにはどうすればよいですか?

$httpさらに、呼び出しが非同期になるため、ファイルが読み取られた後にフィルターが正しい値を返さないという問題に遭遇すると思います。

4

1 に答える 1

3

$httpフィルタプロバイダーにプロバイダーを挿入する必要があります。

app.filter('myFilter', function ($http) {...

それはさておき、あなたはあなたの論理を再考するべきです。フィルタはサーバーとpromiseを処理することは想定されていません。それがサービスとディレクティブの目的です。

于 2013-03-09T19:37:01.527 に答える