我需要得到父母的控制,所以我的指令有一个需要属性,如下所示:递归访问父指令的控制器AngularJS
module.directive('tag', function() {
return {
require: '?^tag',
restrict: 'E',
controller: function() {
this.payload = getPayload();
},
link: function (scope, element, attrs, ctrl) {
usePayload(ctrl.payload);
}
};
});
但是链接功能的CTRL参数返回当前指令的控制器,而不是父母的。 AngularJS的文档很清楚:
?^ - 尝试通过搜索元素的父项找到所需的控制器,或者如果找不到,则返回null。
我在做什么错?
'require:'?^ parent''或将指令的控制器赋值给父控制器的名称,或者将指令的控制器放在一起,并且链接参数中的'ctrl'将默认为父类型。 –
请看[John Lindquist]的视频(http://egghead.io/lessons/angularjs-directive-communication),它可以很好地解释嵌套指令之间的通信。 –
@ m.e.conroy:我必须在'require'中使用相同的名称。如果没有声明控制器,'ctrl'默认为'undefined'。 –