当我读到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>
浏览器中的结果如下:
这是我的问题:
控制器为vm
提供属性age
,为什么vm
中的$scope
也有?
当我使用本机JavaScript时,这不可能发生。
我也可以将两个vm
更改为不同的名称,它不会改变任何内容。
我是angularJS的新手,这让我很困惑,谢谢你的帮助!
顺便说一下,为什么角度使用名称vm
,vm
是否指代某些单词缩写?
答案 0 :(得分:3)
这是我的问题:控制器给vm一个属性年龄,为什么$ scope中的vm也有它?
因为变量vm
和$scope.vm
指向同一个对象。由于两者都是同一个对象,当你更改一个添加新属性时,秒数也会改变。
当我使用原生JavaScript时,这不可能发生。
你在这里有点困惑。这是典型的行为,因为javascript中的所有非原始(对象,函数,数组等)类型都是通过引用传递的。