嗨,我正在学习有角度的知识,并失去了对'var','this'和'$ scope'的区别的理解。
尽管我阅读了此链接,但它却超出了我的理解范围。
使用时ng-controller="myController as ctrl"
,我只能访问对此设置的变量和函数。
而定义ng-controller="myController"
我只能访问$ scope上设置的变量和函数。
有人可以详细解释这个话题吗?
关键字var
是纯javascript,这就是您在javascript中声明变量的方式。像这样:
var myName = 'Nikolaj';
var myAge = 1700;
// etc.
如果您不熟悉,var
应该先学习Javascript,然后再尝试使用Angular,因为Angular的学习曲线可能非常陡峭。
话虽如此,我将尝试解释其他概念。
使用controllerAs
使用推荐的controllerAs语法时,您可以在模板中获得对控制器实例的引用。这就是您使用时发生的情况<div ng-controller="myController as ctrl"></div>
;
您的控制器基本上是“新的”,并存储在一个称为的变量中,该变量ctrl
可通过angular在模板中使用。这样,您可以像下面这样访问模板中的控制器成员(公共函数和变量):
<div ng-controller="myController as ctrl">
<p>{{ctrl.name}}</p>
</div>
为了使变量name
在模板中可用,必须首先将其声明为控制器的公共成员/变量。那就是this
-keyword起作用的地方。创建控制器时,要使变量成为name
公共变量,您需要这样做:
angular.module('app').controller('myController', function(){
this.name = 'My name variable';
});
这this
是Javascript中的一个特殊概念,它是对函数上下文的引用-但仅仅是基本Javascript。
使用$ scope
相反,当您像这样使用控制器时:<div ng-controller="myController"></div>
您无法直接访问模板中的控制器实例。相反,每次您在Angular表达式中使用某些内容时{{name}}
,Angular都会隐式假定该变量name
存在于$ scope变量中。当每个控制器链接到模板时,都有一个与之关联的$ scope变量。要在控制器主体内部访问此变量,您将像这样访问它:
angular.module('app').controller('myController', function($scope){
$scope.name = 'My name variable';
});
推荐使用controllerAs语法的部分原因是,在使用$ scope时,当您具有多个嵌套作用域(即嵌套控制器)时,很难确定要引用的作用域。如本例所示:
<div ng-controller="FirstController">
<h1>{{firstControllerVariable}}</h1>
<div ng-controller="SecondController">
<h2>{{whereDoIBelong}}</h2>
</div>
</div>
使用controllerAs语法,很明显哪个变量属于哪个控制器:
<div ng-controller="FirstController as first">
<h1>{{first.firstControllerVariable}}</h1>
<div ng-controller="SecondController as second">
<h2>{{second.iKnowWhereIBelong}}</h2>
</div>
</div>
使用controllerAs语法的另一个原因是因为它将使迁移到ES2016及更高版本更加容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句