AngularJS范围继承说明

时间:2014-04-16 10:53:59

标签: javascript angularjs inheritance

我在AngularJS中存在范围继承问题。这个问题与Angularjs inheriting parent scope confusion相似,但不知何故答案似乎并不适用于我。

我有一堆嵌套的控制器(使用一些外部组件,因此我无法完全控制所有使用的控制器)。最外面的控制器和最里面的控制器由我自己定义如下:

<div ng-controller="my-outer-controller">
  <div ng-controller="not-mycontroller">
    <div ng-controller="more-controllers">
      <div ng-controller="my-inner-controller">
      </div>
    </div>
  </div>
</div>

function myOuterController(@scope) {
    @scope.someFunction = function() {
    }
}


function myInnerController(@scope) {
    // This function does not exist here!
    @scope.someFunction();
}

函数someFunction()在内部控制器中不可用。首先,我认为必须有一些指令可以在两者之间形成一个孤立的范围但是当我做下面的事情时,它确实有效:

@scope.$parent.$parent.someFunction()

就在我认为我对Angular范围的工作方式有了很好的理解时,他们让我重新回到了地球。

我确信有一个很好的解释为什么会发生这种情况,但我看不到它。我认为您可以通过$ parent访问的任何属性都会被子范围自动继承。

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但我认为这可能有助于其他用户面对您的问题。

我建议您尝试在控制器上使用别名语法。

它会简化您的代码,并可能澄清您尝试做的事情。

别名语法避免直接注入$ scope并使得哪个控制器正在使用更清楚。

Check this awesome explanation out

我希望它有所帮助。