1

我有两个文本输入,一个在根范围内,另一个在控制器范围内,

<input type="text" ng-model="message">

当我在第一个输入中给出“q”时,在根范围内创建了一个属性“消息”。当我在第二个输入中给出“a”时,控制器范围内创建了一个属性“消息”。

现在我在作用域中引入一个对象,

<input type="text" ng-model="data.message">

当我在第一个输入中给出“q”时,在根范围内创建了一个属性“数据”。当我在第二个输入中给出“a”时,控制器范围内没有创建属性“数据”。

为什么是这样?

谢谢,

埃里克·J。

4

1 回答 1

1

Angular 作用域依赖于 Javascript 原型继承。

归结为,如果您在范围上设置属性,那么任何子范围都可以读取它。如果要写回该属性,则必须显式获取设置它的范围,否则它会创建所谓的“影子”模型,这是您在父范围上设置属性的地方,然后在子范围内覆盖它。

解决此问题的方法是按照您的发现进行操作,将作用域上的属性设置为对象,然后在任何时候在该对象上设置属性时,附加到作用域的对象都会更新,而不是作用域。由于您的对象是一个普通的旧 js 对象,因此它可以按照您的预期工作,能够在您喜欢的地方更新和阅读。

于 2013-06-14T10:34:56.563 回答