使用“as controller”语法时,如何引用子控制器内部父级的范围?

时间:2014-05-09 15:44:18

标签: javascript angularjs angularjs-scope

在我目前的ParentController中:

   $scope.grid = {
                $index: null,
                view: [],
                data: []
            };

在我目前的ChildController中:

   .controller('ChildController', ['$Scope',
        function ($Scope) {

            $Scope.grid.$index = null;
            $Scope.grid.view = [];
            $Scope.grid.data = [];

根据我的理解,这允许我填充ChildController中的$ Scope.grid.data 并且还具有可以在Parent Controller内的$ Scope.grid.data上运行的函数。

现在我想开始使用“as controller”语法。因此,如果我理解正确的话,我需要在HTML的两个HTML页面内编码我的HTML中的控制器:

<div data-ng-controller="ParentController as parent" ..

<div data-ng-controller="ChildController as child" ..

我的父控制器是这样的:

   this.grid = {
                $index: null,
                view: [],
                data: []
            };

如果我这样做,那么在ChildController我应该如何参考grid.view?我是以某种方式将“parent”传递给ChildController,然后在我的孩子中使用:

parent.grid.view = [];

最后我听说“as controller”语法是实验性的。它现在已经过了那个阶段吗?

1 个答案:

答案 0 :(得分:2)

只要您不改变代码,&#34; as&#34;语法没有任何区别。

如果您将ParentController更改为

this.grid = {
  $index: null,
  view: [],
  data: []
};

然后您的$scope仍然需要ChildController引用,但是您添加了另一个属性:

   .controller('ChildController', ['$Scope',
    function ($Scope) {

        $Scope.parent.grid.$index = null;
        $Scope.parent.grid.view = [];
        $Scope.parent.grid.data = [];

正如您所看到的那样,它不仅更复杂,而且您还将代码与HTML相结合:如果您决定将HTML更改为ParentController as someController ChildController,那么

即使是&#34; as&#34;您希望grid成为$scope的属性的语法。