controller中as vm 相关释义

首先这里的 vm 是指 View Model

其实,关于这个问题,有三个重要的原因:

历史原因

controller as 是1.2之后才有,和 $scope 作用其实一样,哪怕你混合着用也是没有问题,但这样看起来非常的奇怪。

模板作用域

当然,不光如此,不然还要造个 controller as 做什么,是吧!

这是因为早先 $scope 对于子组件默认继承父组件的数据,但又不会被覆盖,而反之又是隔离的,例如:

function ParentCtrl($scope) {
    $scope.name = 'asdf';
    $scope.age = 25;
}
function ChildCtrl($scope) {
    $scope.age = 26;
}
<div ng-controller="ParentCtrl">
    <p>name:{{name}},age:{{age}}</p>
    <div ng-controller="ChildCtrl">
        <p>child name:{{name}},age:{{age}}</p>
    </div>
</div>

ChildCtrl 并没有定义 name,但依然可以显示:asdf。这就是继承关系,通过这种方式来访问一些变量很不可靠,或者说并不直观。所以,才有 controller as

<div ng-controller="ParentCtrl as p">
    <p>name:{{p.name}},age:{{p.age}}</p>
    <div ng-controller="ChildCtrl as c">
        <p>child name:{{p.name}},age:{{c.age}}</p>
    </div>
</div>

这样的写法不是更明了,直观了吗?

控制器 $scope !== this

先理解模板,那再看这一条就明了许多。

为了不让 $scope 默认继承父组件的内容,因此需要使用 this 让这些东西不再和子组件有瓜葛。

function ChildCtrl($scope) {
    var vm = this;
    console.log(vm === $scope) // false;
}

this 与 $scope 完全不一样,前者就是明确表示控制组实例,而后者是一个比较奇特的this怪咖。

最后关于 var vm = this,你要愿意叫一个 var funkScopeTenThousandsYear = this 也行。

转载于:https://my.oschina.net/u/3501740/blog/1813294

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值