当我阅读angularJS api时,我发现了这样的代码:
myApp.controller('MyController', ['$scope', function($scope) {
var vm = $scope.vm = {name:'savo'};
}
]);
这个多重赋值看起来很容易理解。 但是当我这样编码时:
myApp.controller('MyController', ['$scope', function($scope) {
var vm = $scope.vm = {name:'savo'};
vm.age = 18;
}
]);
HTML 是这样的:
<div ng-controller="MyController">
<pre>{{vm}}</pre>
<pre>{{vm.name}}</pre>
<pre>{{vm.age}}</pre>
</div>
浏览器中的结果如下:
这是我的问题:
Controller 给vm
一个属性age
,为什么$scope
中的vm
也有它?
当我使用原生 JavaScript 时,这不会发生。
我也可以将两个 vm
更改为不同的名称,它不会改变任何东西。
我是 angularJS 的新手,这让我很困惑,谢谢你的帮助!
对了,angular为什么用vm
这个名字,vm
是指一些单词的缩写吗?
最佳答案
Here is my question: The controller give the vm a attribute age, why the vm in the $scope has it too?
因为变量vm
和$scope.vm
指向同一个对象。由于两者是同一个对象,当您更改一个添加新属性时,秒数也会发生变化。
When I use native JavaScript, this can not happen.
你在这里有点困惑。这是典型的行为,因为 javascript 中的所有非基本类型(对象、函数、数组等)都是通过引用传递的。
关于javascript - 我如何理解 AngularJS 中的 "var vm = $scope.vm = {}"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28851469/