我是angularjs的新手。 如果将函数分配给$ scope或控制器中的此关键字,有什么区别? 谢谢。
示例(范围):
.controller('TestCtrl', ['$scope', function ($scope) {
$scope.testFunc = function () {
};
}]);
示例(this)
.controller('TestCtrl', [function () {
var app = this;
app.testFunc = function () {
};
}]);
答案 0 :(得分:10)
$scope
是角度框架和双重数据绑定功能的核心概念。例如,它旨在与以下内容分享其内容:
例如,在模板中,您需要将函数绑定到scope
才能访问它。您将无法直接调用this
上绑定的功能。
编辑:感谢BKM post指出这种行为可以通过“控制器为”语法将模板直接绑定到控制器。但是由您来决定是否要在模板中访问控制器的所有对象/变量,而不是使用专用的viewModel
(scope
)。有关利弊,请参阅:https://groups.google.com/forum/#!topic/angular/84selECbp1I
这是一个重要的角度概念,你需要理解。
见:
this
键盘工作仅指j object
引用您的controller
,仅此而已。
答案 1 :(得分:8)
比西说错了。没有必要将函数绑定到范围以便访问它。
在最新版本的Angular JS
中,1.2
他们引入了一个新关键字controllerAs
,以便不在控制器内部设置范围。
<div ng-controller="testCtrl as test">
{{test.value}}
</div>
在您的控制器中
app.controller('testCtrl ', function () {
this.value = 'Hello World';
});
请参阅生成上述控制器,但不在其中注入$scope
。
Here是一个很好的视频教程,解释了这个
答案 2 :(得分:0)
下面是两者之间的区别。
CONTROLLER AS
语法是新语法,已在1.2.0中正式发布。 $scope
是一种古老的技术,自从发布了angular的初始版本以来就可以使用。
您可以使用其中一种技术。两者都有自己的用途。例如,CONTROLLER AS
语法使您的代码在使用嵌套范围时更具可读性。我们在之前的视频中对此进行了讨论。
如果要使用$scope
,则必须将其注入到控制器函数中,而对于CONTROLLER AS
语法,则不需要进行这种注入,除非您需要其他注入。 / p>
使用哪种取决于您的个人喜好。一些人喜欢使用$scope
,而另一些人喜欢使用CONTROLLER AS
语法。要记住的重要一件事是,尽管您使用的是CONTROLLER AS
语法,但在幕后角度仍然使用$scope
。 Angular获取控制器实例,并将其添加为作用域上的引用。
<div ng-controller="cityController as cityCtrl">
{{cityCtrl.name}}
</div>
在上面的示例中,因为我们使用的是CONTROLLER AS
语法,所以angular接受cityCtrl
的实例cityController
并将其添加为作用域上的引用。因此,在绑定表达式中,您可以将其读取为$scope.cityCtrl.name
。