在AngularJS主页的“创建组件”部分,有这样一个例子:
controller: function($scope, $element) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
}
注意select方法是如何添加到$scope的,而addPane方法是添加到this的。如果我把它改成$scope。addPane,代码崩溃。
文档说实际上是有区别的,但它没有提到区别是什么:
以前的Angular版本(1.0 RC之前)允许你将此方法与$scope方法互换使用,但现在不再是这样了。在作用域上定义的方法内部this和$scope是可以互换的(angular将this设置为$scope),但在控制器构造函数内部则不能互换。
this和$scope在AngularJS控制器中是如何工作的?