angularjs - 在 Angular 中,为什么你应该总是在你的 $scope 中使用对象?

标签 angularjs

我在不同的地方读到,始终在您的范围内使用对象很重要,但我还没有找到关于为什么会这样的明确答案。有人可以帮帮我吗?

最佳答案

我喜欢 Ryan Q 的回答,但在做了更多研究之后,我想添加一个更强调 javascript 原型(prototype)继承的答案。

这里的问题是对象与原始问题(按引用传递和按值传递)以及 Javascript 的原型(prototype)继承是如何工作的。

当 javascript 类从父类继承时,它会将值复制到子类中。有两种类型的值可以被复制,对象或基元。

当通过继承复制一个对象时,它是通过引用传递的。这意味着我在子对象中所做的任何更新也将在父对象中看到。

当通过继承复制原语时,它是按值传递的。这意味着父类中不会看到任何更新。

这与 Angular 范围有什么关系?当我们创建指令时,会为该指令创建一个范围,我们可以将其声明为隔离范围或继承范围。如果它是一个继承范围,它将继承其父范围的项目。现在,如果我的父作用域中有原始值,我将把它们作为值传递继承到我的子作用域中。这意味着当我在父作用域中进行更改时,它不会在我的子作用域中看到,反之亦然。现在我可以在我的子范围和父范围中使用不同值的相同继承变量。这会导致困惑……可能还有愤怒……哈哈。

所以如果只是使用一个对象,那么就不会出现这个问题。这就是为什么您应该始终在范围内反对。

关于angularjs - 在 Angular 中,为什么你应该总是在你的 $scope 中使用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718547/

相关文章:

javascript - Angular 嵌套多次单击指令

javascript - 键盘事件在 Chrome 53 中不起作用

javascript - 在指令中包含 js 库文件的正确方法,避免可能更改的相对路径

javascript - 指令链接中的 $watch 表达式与 Controller 函数之间的区别?

angularjs - AngularJS 中的 $$phase 是什么?

javascript - AngularJS - $emit 仅在其当前范围内有效?

html - 如何以 Tiles 格式而不是表格格式显示 Angular 数据

javascript - 在 Angular Bootstrap DateTimePicker 中禁用时间

angularjs - 我可以在html中声明一个变量吗?

angularjs - 如何配置标签的语法标记