angularjs,为指令创建过滤器

时间:2014-08-27 17:29:26

标签: angularjs

我正在尝试以角度创建filter,这可能会影响绑定到指令的数据的方式,类似于json过滤器可以应用于表达式的方式。

我遇到了很多麻烦,因为似乎定义一个过滤器不足以处理除内联表达式之外的任何内容。不过,我绝对肯定我以前见过它。

问题

是否可以创建与指令内联的过滤器?喜欢这个?

<div ng-directive="Model.Target | filterName"></div>

更新

ng-model只是一个例子。我没有找到现有的过滤器,我不是在寻找如何应用过滤器,我不是在寻找ng-repeat。我特别想要创建一个可以使用指令的 new 过滤器。

更新2

尝试更多这样做,我研究了angular源代码(line 154 of filters.js)并尝试模拟那里的代码,但我遇到了奇怪的行为。使用此代码;

.filter('sample', function () {
    return function (obj) {
        console.log("typoef: ", typeof obj);
    }
});

我尝试将其绑定到指令;

<div data-ng-custom-directive="Model.Tags | sample"></div>

我收到了错误......

  

未捕获的TypeError:undefined不是函数

自定义指令并不是什么特别的东西,它只是获取给定的对象,并在将其发送到$scope.Model.Tags对象之前对其进行一些解析。

有人提到您不能在ng-model上添加过滤器,这对我来说很困惑。它只是ng-model,还是指法其他而不是ng-repeat你不能应用指令?我理解它的方式,根本没有针对ng-model编写的 过滤器,虽然我并没有尝试这样做,但这个概念并没有太大不同。

1 个答案:

答案 0 :(得分:3)

问题不在于过滤器,而是您用于指令变量(属性)的绑定类型。您需要使用'='。例如:

<强> HTML

<div ng-init="test = [1,2,3,4,5]">
    <div dir-a="test | limitTo:3"></div>
</div>

<强> JS

.directive('dirA', function() {
    return {
        scope: {
            dirA: '=' // this is important, '@' would not work
        },
        link: function($scope, iElm, iAttrs, controller) {
            console.log('$scope.dirA = ', $scope.dirA);
        }
    };
});

打印到控制台"$scope.dirA = " Array [ 1, 2, 3 ]