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) {...

除此之外,你应该重新考虑你的逻辑。过滤器不应该处理服务器和承诺。这就是服务和指令的用途。

于 2013-03-09T19:37:01.527 回答