加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 06:59:36 所属栏目:安全 来源:网络整理
导读:嗨,我正在学习角度,并且已经忘记了解’var’,’this’和’$scope’之间的区别. 虽然我读了这篇 link,但它超越了我的脑海. 当我使用ng-controller =“myController as ctrl”时,我只能访问变量和函数集. 而定义ng-controller =“myController”我只能访问$sco
嗨,我正在学习角度,并且已经忘记了解’var’,’this’和’$scope’之间的区别.
虽然我读了这篇 link,但它超越了我的脑海.
当我使用ng-controller =“myController as ctrl”时,我只能访问变量和函数集.
而定义ng-controller =“myController”我只能访问$scope上的变量和函数集.
有人可以深入解释这个话题吗?

解决方法

关键字var是纯javascript,它就是你在javascript中声明变量的方式.像这样:

var myName = 'Nikolaj';
var myAge = 1700;
// etc.

如果你不熟悉var,你应该在冒险进入Angular之前先学习Javascript,因为Angular的学习曲线可能非常陡峭.

有了这个说我会尝试解释其他概念.

使用controllerAs

使用推荐的controllerAs语法时,您将获得模板中控制器实例的引用.这是当你使用< div ng-controller =“myController as ctrl”>< / div&gt ;; 您的控制器基本上是“新建的”并存储在一个名为ctrl的变量中,该变量在角度模板中可用.这允许您访问模板中的控制器成员(公共函数和变量),如下所示:

<div ng-controller="myController as ctrl">
    <p>{{ctrl.name}}</p>
</div>

为了使变量名在模板中可用,必须首先将其声明为控制器的公共成员/变量.这就是this-keyword发挥作用的地方.当您创建控制器时,要将变量名称设为public,您可以这样做:

angular.module('app').controller('myController',function(){
    this.name = 'My name variable';
});

这是Javascript中的一个特殊概念,它是对函数上下文的引用 – 但只是基本的Javascript.

使用$scope

当您使用这样的控制器时:< div ng-controller =“myController”>< / div>您无法直接访问模板中的控制器实例.相反,每次在Angular表达式中使用某些东西时,例如{{name}},Angular会隐式假设$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及更高版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读