var vs this vs AngularJS中的$ scope(1.4)

编码器X

嗨,我正在学习有角度的知识,并失去了对'var''this''$ scope'的区别的理解
尽管我阅读了此链接,但它却超出了我的理解范围
使用时ng-controller="myController as ctrl",我只能访问对此设置的变量和函数
而定义ng-controller="myController"我只能访问$ scope上设置的变量和函数
有人可以详细解释这个话题吗?

尼古拉·达姆·拉森(Nikolaj Dam Larsen)

关键字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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章