我正在寻找一种方法将过滤后的数组传递给指令:
我尝试了以下内容:
<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>
但这仍然给我同样的错误。
答案 0 :(得分:3)
你们两个问题彼此都有关系。
您可以在ng-model上应用过滤器,但不应该这样做。因为它会给你第二个问题所面临的错误。
当您将过滤器作业传递给指令时,angular会将监视放在您的jobs变量上。因此,当指令中的作业被分配时,会调用,这将再次触发过滤,这将持续到角度达到最大消化周期。
要避免这种情况,您可以创建一个过滤方法并在ng-model中传递该方法。这样,您可以避免复制创建和最大摘要周期错误。