【发布时间】:2014-05-12 23:46:25
【问题描述】:
我有一个包含一些子指令的自定义表单元素指令。我在父指令中需要ngModel,以便我可以在指令HTML 声明中使用ng-model="object.data"。
我遇到的问题是从子指令中更改该值。子指令可能需要父控制器函数,但该控制器函数无法访问 ngModelController,而 postLink 函数只能使用(我可能错了)。
Controller 和 Link 函数都可以访问相同的范围(在这种情况下,并不总是如此),因此我可以执行以下操作:
.directive('myDirective', [function() {
return {
....
controller: function ($scope, $element, $attrs) {
this.select = function (selected) {
$scope.ngModelCtrl.$setViewValue(selected);
};
},
link: function (scope, elem, attrs, ngModelCtrl) {
scope.ngModelCtrl = ngModelCtrl;
}
};
}])
.directive('myChildDirective', [function () {
return {
require: '^myDirective',
....
link: function (scope, elem, attrs, myDirectiveCtrl) {
elem.bind('click', function () {
myDirectiveCtrl.select(scope.value);
});
}
}
}]);
通过将ngModelController 分配给范围,我可以在控制器函数方法中访问它,而该方法又可以由子指令调用,但这看起来很老套,必须有更好的解决方案,因此非常感谢任何帮助.
请看我的Plunkr here
【问题讨论】:
标签: javascript angularjs angularjs-directive