在Angular中,为什么要始终在$ scope中使用对象?

CBP*_*CBP 2 angularjs

我在不同的地方读过,你总是在你的范围内使用对象很重要,但我还没有找到关于它为什么的明确答案.有人可以帮帮我吗?

CBP*_*CBP 5

我喜欢Ryan Q的答案,但在做了一些更多的研究后,我想补充一点,更加强调javascript的原型继承.

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

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

通过继承复制对象时,它通过引用传递.这意味着我在子对象中进行的任何更新也将在父对象中看到.

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

这与Angular范围有什么关系?当我们创建一个指令时,将为该指令创建一个作用域,我们可以将它声明为一个孤立的作用域或一个继承的作用域.如果它是继承的范围,它将继承其父级的范围项.现在,如果我在父作用域中有原始值,我会将它们作为pass by value继承到我的子作用域中.这意味着当我在父作用域中进行更改时,在我的子作用域中不会看到它,反之亦然.现在我可以在我的子和父范围中使用不同的值具有相同的继承变量.这会导致混乱...... 可能是愤怒......哈哈.

因此,如果您只使用一个对象,那么这个问题就不会发生.这就是为什么你应该总是在范围内对象.