我知道如何在子指令的link函数中获取parent的指令控制器.
但是,我宁愿避免使用链接函数(和$scope all-together)并将所有代码都放在指令的控制器函数下.
但是,我宁愿避免使用链接函数(和$scope all-together)并将所有代码都放在指令的控制器函数下.
angular.directive('parent',function(){ return { templateUrl: '/parent.html',scope: true,bindToController: true,controllerAs: 'parentCtrl',controller: function(){ this.coolFunction = function(){ console.log('cool'); } } } }); angular.directive('child',function(){ return { templateUrl: '/child.html',require: '^parent',controllerAs: 'childCtrl',controller: function() { // I want to run coolFunction here. // How do I do it? } } });
任何帮助表示赞赏!
您可以将’$element’注入控制器并访问父控制器,如 –
controller: ($element) -> var parentCtrl = $element.parent().controller('parent'); parentCtrl.coolFunction(); //.......... //..........
这可能不是访问“任何”父控制器最透明的方式,因为它需要指令的特定名称,它是jqlite而不是纯Angular.
发现这个帖子很有用 – How to access parent directive’s controller by requiring it recursively?
编辑:感谢@Dmitry弄清楚角度不需要’.parent’来获得控制器.更新的代码 –
controller: ($element) -> var parentCtrl = $element.controller('parent'); parentCtrl.coolFunction(); //..........