我有一个自定义表单元素指令,其中包含一些子指令。我在父指令中需要ngModel
,以便我可以在指令HTML声明中使用ng-model="object.data"
。
我遇到的问题是从子指令更改该值。子指令可以要求父控制器功能,但该控制器功能无法访问ngModelController
函数可用的postLink
({I}}错误。
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
分配给范围,我可以在控制器函数方法中访问它,而控制器函数方法又可以通过子指令调用,但这看起来非常hacky并且必须有更好的解决方案,所以任何帮助都将是非常感谢。
请参阅我的Plunkr here
答案 0 :(得分:0)
也许我不太明白你想要完成什么,但为什么不在元素上使用ng-click,并在父控制器中完全处理它?</ p>
如果您需要修改父作用域中的内容,请将该对象注入子作用域。