我的整体问题是:这是预期的行为吗?
我在这里有一个演示:http://plnkr.co/edit/RMGKxVMsbO6tOI1ftftQ?p=preview
我有一个字符串,一个bool,一个在三个不同范围内打印三次的整数。
首先在MainCtrl控制器范围的这些属性的版本中。
SubController有这些值的第二个实例,包括从它继承的父类中打印整数。
“Mess With Values”按钮将添加到整数,切换布尔值,字符串追加字符串。
我觉得很奇怪:
1)在单击“新子范围”按钮之前,对父项整数和其他基元的更改将反映在包含ng的子控制器实例的模板中。单击ng-included的按钮并尝试设置父项值后,不仅不会在第一个(父项)中更新值,而且还不会看到对值的进一步更新(使用第二个按钮)。
2)ng-included无法更新父元素值,包括基元和对象属性。非ng包含的可以更新父元素值。这是为什么?
我读过What are the nuances of scope prototypal / prototypical inheritance in AngularJS?虽然它非常棒,但我并没有看到一个解释这种奇怪现象的例子,特别是在尝试访问它们之前访问父母的属性。
感谢您的帮助SO社区。 :)
答案 0 :(得分:1)
这里的问题是ng-include在子节点和父节点之间插入额外的$ scope。因此,当您的非ng-included部分更新$ parent时,它将更新您期望的父级。但是,当您从包含ng的部分更新$ parent时,您正在更新一个显然不可见的$ scope。
您可以在console.log($scope.parent)
中添加testFunc()
并扩展$parent
层次结构来查看此内容。