对于在指令模板中定义的输入,我想将其模型绑定到其父作用域上的属性。由于指令的多个实例位于页面上,因此需要隔离范围。我想避免必须将模型作为指令声明中的属性传递。看来这应该是可能的;但它不起作用。
指令:
catalogApp.directive("cmFieldFilterDtv", function () {
return {
templateUrl: "/templates/directives/field-filter-dtv.html",
restrict: 'E',
scope: {},
link: function (scope, element, attrs) {
var field = attrs.fid;
var fieldCamel = field.toLowerCaseFirst();
scope.fid = 'filter' + field;
scope.model = scope.$parent['filters.' + fieldCamel];
scope.options = scope.$parent['configFilter' + field];
}
}
});
模板:
<input id="{{fid}}"
ng-model="model"
data-kendo-multi-select
data-k-options="options" />
页:
<cm-field-filter-dtv fid="PartNumber"></cm-field-filter-dtv>
<cm-field-filter-dtv fid="PartType"></cm-field-filter-dtv>
<cm-field-filter-dtv fid="Status"></cm-field-filter-dtv>
输入的选择更改不会被推送(通过模型绑定)到父作用域的属性。
答案 0 :(得分:0)
为什么你不能传递它?在任何一种情况下,你都可以这样做:
catalogApp.directive("cmFieldFilterDtv", function () {
return {
templateUrl: "/templates/directives/field-filter-dtv.html",
restrict: 'E',
scope: {},
link: function (scope, element, attrs) {
var field = attrs.fid;
scope.fieldCamel = field.toLowerCaseFirst();
scope.fid = 'filter' + field;
scope.options = scope.$parent['configFilter' + field];
}
}
});
模板:
<input id="{{fid}}"
ng-model="$parent['filters.' + fieldCamel]"
data-kendo-multi-select
data-k-options="options" />
答案 1 :(得分:0)
scope.$parent
应该允许您访问父作用域。看起来问题可能就在这里......
scope.model = scope.$parent['filters.' + fieldCamel];
父作用域是否具有名为'filters.' + fieldCamel
的属性(例如$scope["filters.foo"]
)?或者它是否有一个名为filters
的属性,其中包含其他值(例如$scope.filters.foo
)?如果是后者,则需要将其更改为...
scope.model = scope.$parent['filters'][fieldCamel];
或
scope.model = scope.$parent.filters[fieldCamel];
但正如其他人所提到的,您不希望将指令耦合到其父作用域。考虑传递所有内容。