如何在指令链接函数中使用从控制器传递的筛选器

How to Use Filter Passed from Controller in Directive Link Function

本文关键字:控制器 筛选 指令 链接 函数      更新时间:2023-09-26

我有一个过滤器,我想在指令中使用它。我有一个简单的过滤器,它在ng repeat指令中运行良好我不太确定如何准确地应用指令链接函数内部。我写了下面的指令,把过滤器作为一个函数,这是正确的方法吗,我怎么能这样做?或者有更好的方法吗?

JavaScript

myApp.directive('repeatDirective', ['$filter', function($filter) {
    return {
        scope: {
            'filter': '&?',
            'itemList': '='
        },
        template: "<div ng-repeat='item in itemList'>{{item .name}}</div>",
        link: function (scope,element,attrs, ngModelCtrl) {
           **// how to  filter itemList here???**
        }
    };
}]);

过滤器

$rootScope.collectionFilter= function (transType) {
if($scope.formData_EventDetails.actualPotential){
    if($scope.formData_EventDetails.actualPotential=='NM'){
        //console.log(transType.tranTypeName.indexOf('Near Miss'));
        return transType.tranTypeName.indexOf('Near Miss') >=0 ;
    }
    else{
        return transType.tranTypeName.indexOf('Near Miss') <0 ;
    }
}
return true;
};

HTML

<repeat-directive item-list="someObjectCollection" filter="collectionFilter()">
</repeat-directive>

使用Angular的register-filter方法定义过滤器,然后像使用内置过滤器一样使用。如果你有问题,请告诉我。

过滤器:

myApp.filter('collectionFilter', function(){
  return function(input){
    return input ? 'true : 'false';
  };
});