angularjs:将过滤后的数组传递给指令

时间:2014-02-10 10:58:25

标签: javascript angularjs angularjs-directive

我正在寻找一种方法将过滤后的数组传递给指令:

我尝试了以下内容:

<my-directive model="myArray | filter:{myProperty: 'some value' }" /> 

但这不起作用。我认为它意味着与ng-repeat一起使用,因为在这里我只是传递一个函数而不是过滤的数组。

有没有办法做到这一点,除了制作我的数组的过滤副本?

修改

这是完整的代码:

<request-service type="editing" jobs="vm.selectedMaterial.jobs | filter:{service.code: 'ED'}"></request-service>
<request-service type="translation" jobs="vm.selectedMaterial.jobs | filter:{service.code: 'TR'}"></request-service>

和指令:

(function () {
'use strict';

var directiveId = 'requestService';

angular.module('comp.domain.directives').directive(directiveId,  [directiveFunc]);

function directiveFunc(dependency) {
    return {
        restrict: 'E',
        templateUrl: 'app/dm/views/templates/requestService.html',
        scope: {
            type: '@',
            jobs: '='
        },
        link: function (scope, element, attrs) {                
        }
    };
}
})();

这样做时,我收到错误'将循环结构转换为JSON'

编辑2

根据建议的解决方案,我做到了:

 $scope.filterJob = function (type) {
        if ($scope.vm.selectedMaterial) {
            return $scope.vm.selectedMaterial.jobs.filter(function (job) { return job.service.code === type; });
        };
    }

并在视图中:

  <request-service type="ED" jobs="filterJob('ED')"></request-service>

但这仍然给我同样的错误。

1 个答案:

答案 0 :(得分:3)

你们两个问题彼此都有关系。

您可以在ng-model上应用过滤器,但不应该这样做。因为它会给你第二个问题所面临的错误。

当您将过滤器作业传递给指令时,angular会将监视放在您的jobs变量上。因此,当指令中的作业被分配时,会调用,这将再次触发过滤,这将持续到角度达到最大消化周期。

要避免这种情况,您可以创建一个过滤方法并在ng-model中传递该方法。这样,您可以避免复制创建和最大摘要周期错误。