0

我们可以只this在控制器中使用,而不可以$scope吗?

在某些情况下,当然是的,我知道……但是……

如果我们需要$emit$broadcast以及其他一些角度特征,我们只能在范围内找到?我们可以通过这种方式获得它,或者通过其他方式获得它吗?

4

2 回答 2

0

当您以这种格式创建控制器时:

angular.module('myModule').controller('myController',['$scope',function($scope){
     //controller code here
}]);

您传递的函数基本上是控制器对象的构造函数

所以当你写这样的代码时:

angular.module('myModule').controller('myController',['$scope',function($scope){
         this.myObject = { key : value};
    }]); 

您基本上是在制作对象myObject的属性myController

控制器基本上在 angular.js 中用于增强视图(由指令处理)和服务(负责业务逻辑)之间的通信

要启用它,您可以使用依赖注入 Angular 提供并将$scope对象插入到控制器中,如上所示

当您使用ng-controller="myController"新的范围对象实例化控制器时,将创建与您的控制器对象一起使用的对象。作为参数传递给控制器​​构造函数的$scope对象具有新创建的范围。

这是角度文档的摘录:

属性包含视图模型(视图将呈现的模型)。所有 $scope 属性都将在 DOM 中注册 Controller 的位置对模板可用。

所以基本上你附加到 $scope 对象的任何属性都可以在 DOM 中进行操作

您附加到的任何属性this在 DOM 中都不可用。例如 :

this is you angular configuration :

angular.module('myModule').controller('myController',['$scope',function($scope){
             $scope.name = 'kiran'
             this.message = 'hello world';
        }]); 
This is your html :

<p>{{name}}</p> 

输出将是:基兰。

如果您尝试过 :<p>{{message}}</p>相反,它将引发错误。

只有作用域对象包含像 $$watchers 这样的属性,它是在当前作用域上监视的所有变量的列表,$watch API,用于事件处理的 $on API 等等。

所以你不能用它来利用这些属性。希望这能解决问题。

于 2015-12-19T09:20:06.930 回答
0

据我所知,有一些特殊情况,如 $emit 等,您必须使用 $scope 而不能使用它。

于 2015-12-19T08:37:52.503 回答