javascript - 我如何理解 AngularJS 中的 "var vm = $scope.vm = {}"?

标签 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

这是我的问题: 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/

相关文章:

javascript - 如何将 $scope 对象获取到 Angular 服务

javascript - 自定义 Angular 指令、控制台日志、DOM 更新、屏幕不

angularjs - 如何从 Controller 方法触发 angularjs 动画?

javascript - ng-repeat 内的 AngularJS 图像预览,可能是范围问题

javascript - 如何使用 sw-precache runtimeCaching 缓存 googleapis.com

javascript - Angular.js : Is . value() 设置应用程序范围常量的正确方法以及如何在 Controller 中检索它

javascript - 在 Angularjs 中没有 $scope 范围对象不会改变

javascript - React-Router:没有找到路由?

javascript - 在 JavaScript 中调用另一个函数内的函数

javascript - 在 "react"渲染中使用迭代语句创建表