使用" Controller as"语法,什么"范围"是发布到的控制器实例属性?

时间:2015-04-21 19:39:58

标签: angularjs angularjs-controller

Controller的文档说:

  

通过将ng-controller ="指定为propertyName",可以将控制器实例发布到范围属性中。

控制器实例发布到的scope是什么?该范围来自哪里?我在哪里可以了解更多关于这个"范围"?

修改

我的部分问题是,如果您不使用控制器作为,而是注入$ scope ...然后在$ scope上设置您的属性...它是如何从那里到达范围的& #39;在视图中?基本上控制器实例对吗?

1 个答案:

答案 0 :(得分:2)

无论您是否使用ng-controller

controllerAs都会创建子范围。子范围原型继承自其父级。

<div ng-app="app">
  {{$id}} - the outer scope id is 1 (same as root here)
  <div ng-controller="FooCtrl">
    {{$id}} - the child scope id is 2
  </div>
</div>

FooCtrl实例将获取ng-controller指令创建的子范围:

.controller("FooCtrl", function($scope){
   console.log($scope.$id); // 2
});

controllerAsng-controller创建的范围实例没有任何作用。它只是简单地在ng-controller属性

下的控制器范围(由as alias创建的子范围)上分配控制器实例。
<div ng-controller="FooCtrl as ctrl">
  {{ctrl.p1.v}}
</div>

控制器功能分配给实例:

.controller("FooCtrl", function($scope){
   this.p1 = {v: "p1"};

   // the following is true
   console.log($scope.ctrl === this); 
   // but don't do this, since the controller function shouldn't know about ctrl alias

});