范围Angularjs的父ID

时间:2014-09-26 18:31:55

标签: javascript angularjs

我想访问或操作范围的父母的父母,而不会太复杂。作为时尚的控制器允许命名父控制器:this.applicationCtrl.something给定applicationCtrl> parent1Ctrl> child1Ctrl - siblingOfChild1Ctrl

为了给你一个更好的例子,我在<body>标签上有一个applicationCtrl,我有一个带有sidePanelCtrl的侧面板,带有contentCtrl的内容带有嵌套的contentChildCtrl }

以控制器为模型,我可以通过调用sidePanelCtrl来调用或更改this.sidePanelCtrl上的内容,如果我只想使用$scope方法,我可以这样做吗?

这是专门针对我不想写contentChildCtrl $scope.$parent.$parent的{​​{1}},我仍然只能访问applicationCtrl而不是sidePanelCtrl

1 个答案:

答案 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,因为下面的评论中提到了

编辑:已更新为使用服务