我想访问或操作范围的父母的父母,而不会太复杂。作为时尚的控制器允许命名父控制器:this.applicationCtrl.something
给定applicationCtrl> parent1Ctrl> child1Ctrl - siblingOfChild1Ctrl
为了给你一个更好的例子,我在<body>
标签上有一个applicationCtrl,我有一个带有sidePanelCtrl
的侧面板,带有contentCtrl
的内容带有嵌套的contentChildCtrl
}
以控制器为模型,我可以通过调用sidePanelCtrl
来调用或更改this.sidePanelCtrl
上的内容,如果我只想使用$scope
方法,我可以这样做吗?
这是专门针对我不想写contentChildCtrl
$scope.$parent.$parent
的{{1}},我仍然只能访问applicationCtrl
而不是sidePanelCtrl
答案 0 :(得分:1)
如果您不知道父作用域的嵌套级别,或者不想键入$scope.$parent.$parent
等,您可以将类似的内容附加到服务中:
angular.module('app').service('inherit', function () {
var inherit = function(scope, item)
if (!scope) return;
if (scope[item]) return scope[item];
return inherit(scope.$parent, item);
}
return inherit;
}
如果您的命名空间不是很好,那么它可能没有多大帮助,但如果您想要修改孙子范围内的侧边栏内容,您可以在其中调用var sidebarNav = inherit($scope, 'sidebarNav');
孙子控制器。
编辑 - 最好将其放在服务中,而不是$rootScope
,因为下面的评论中提到了
编辑:已更新为使用服务