我怎么能这样理解" var vm = $ scope.vm = {}"在AngularJS?

时间:2015-03-04 10:00:24

标签: javascript angularjs angularjs-scope

当我读到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>

浏览器中的结果如下: enter image description here

这是我的问题: 控制器为vm提供属性age,为什么vm中的$scope也有?

当我使用本机JavaScript时,这不可能发生。 我也可以将两个vm更改为不同的名称,它不会改变任何内容。

我是angularJS的新手,这让我很困惑,谢谢你的帮助!

顺便说一下,为什么角度使用名称vmvm是否指代某些单词缩写?

1 个答案:

答案 0 :(得分:3)

  

这是我的问题:控制器给vm一个属性年龄,为什么$ scope中的vm也有它?

因为变量vm$scope.vm指向同一个对象。由于两者都是同一个对象,当你更改一个添加新属性时,秒数也会改变。

  

当我使用原生JavaScript时,这不可能发生。

你在这里有点困惑。这是典型的行为,因为javascript中的所有非原始(对象,函数,数组等)类型都是通过引用传递的。