AngularJS $过滤器无法在Directive中使用

时间:2014-09-02 07:24:28

标签: angularjs angularjs-directive angularjs-filter

/你好。

.directive('rnDatatable', function($filter) { //Таблица

return {

    scope : {
        ngTablefields : "=",
        ngTabledata : "="
    },
    restrict: 'AEC',
    link: function(scope, element, attrs) {
         scope.ngOrderb = function(fld) {
             scope.OrderRev=!scope.OrderRev
            scope.ngTabledata = $filter('orderBy')(scope.ngTabledata, fld,scope.OrderRev);
        }
    },          

    template: 
            '<table class="table table-striped">'+
            '<tr>'+
            '<td  ng-repeat="fields in  ngTablefields">'+
            '<span class="text-primary pointer" ng-click="ngOrderb({fld:fields.colvalue})">   {{fields.colname}}   </span> </td>'+
            '</tr>'+
            '<tr ng-repeat="row in ngTabledata"  class="animate-if">'+
            '<td ng-repeat="fields in ngTablefields">'+
            '<span class="text-default "> {{row[fields.colvalue]}}</span>'+
            '</td>'+
            '</tr>'+
            '</table>'  



};

});

我在$filter('orderBy')

上有错误

TypeError:object不是函数

  • at Array。 (/js/angular.js:15550:24)
  • 在比较器(/js/angular.js:15559:36)
  • at /js/angular.js:15566:34
  • at Array.sort(native)
  • at /js/angular.js:15555:22
  • 在Scope.scope.ngOrderb(/js/controller.js:371:43)
  • at /js/angular.js:10797:21
  • at /js/angular-touch.js:472:9
  • 在Scope。$ eval(/js/angular.js:12699:28)
  • 在Scope。$ apply(/js/angular.js:12797:23)

你能解释一下为什么吗?

更新:plunker

1 个答案:

答案 0 :(得分:1)

问题是模板中的ng-click指令。解决方案非常简单:

<span class="text-primary pointer" ng-click="ngOrderb(fields.colvalue)">

当您将该参数更改为fields.colvalue时,您在plunkr中的示例有效。