我在使该指令正常工作方面遇到麻烦,在尝试添加范围以链接功能之前,它一直工作良好。这是我到目前为止的
指令(采用requirejs格式,因此使用模块/组件名称):
angular.module(metadata.moduleName, [
filterFieldControl.moduleName
]).directive(metadata.componentName,
function(scope) {
return {
controller: filterFieldControl.componentName,
restrict: 'C',
replace: true,
scope: {
filterFn: '='
},
template: builderResultFiltersHTML
};
}
);
控制器
angular.module(metadata.moduleName, []).controller(metadata.componentName, [
'$scope',
function($scope) {
$scope.filterChange = function() {
$scope.filterFn();
};
}
]);
模板:
<div>
<ul>{{filter.name}}
<li ng-repeat="value in filter.values">
<input type="checkbox" ng-model="filterObject[filter.name][value]" ng-change="filterChange()">{{value}}
</li>
</ul>
在哪里使用它(也许是重复出现的一些问题?)
<div ng-repeat="result in searchResults.results" class="builder-search-result" filter-fn="filterClicked" ></div>
因此,如果我从指令中删除范围,它就可以正常工作。如果我添加它,控制台中没有错误,但没有出现提示。
如果我删除它,它可以工作:
scope: {
filterFn: '='
},
似乎无法找出原因。可以使用一些想法。
编辑:在这里添加了小提琴https://jsfiddle.net/vt1uasw7/31/-您会注意到,如果删除指令的作用域部分,一切都会很好。
当您scope: { ... }
在指令中执行操作时,您是在告诉Angular创建一个单独的scope,这是一个原型上不会从任何其他范围继承的范围。
现在,看一下指令的模板:
<div>in
<ul>{{filter.name}}
<li ng-repeat="value in filter.values">
<input type="checkbox" ng-change="filterChange()">{{value}}
</li>
</ul>
</div>
双方filter
并filterChange()
在控制器的范围定义,因为它有自己的私人范围的指令不能访问它们。
您可以通过执行以下两项操作之一来修复代码:
$parent.filter
和$parent.filterChange()
;将filter
和添加filterChange
到指令的隔离范围:
scope: {
filter: '=',
filterChange: '&'
}
我建议#2。这是您更新的小提琴。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句