我发现了这个线程,其中original fiddle的ng-include
范围不会修改其父范围。
其中一条回复表明:
它很丑陋且不可预测,所以我建议你将数据包装在一个对象变量中:http://jsfiddle.net/e5rfP/3/
似乎有用。这是为什么?
答案 0 :(得分:7)
对象变量的工作原理是因为JavaScript原型继承的工作方式。 ngInclude创建自己的子范围。此子范围原型继承自父范围。
在JavaScript中,当我们在子范围内编写类似$scope.x = 22
的内容时,这会在子$ scope上创建一个x
属性,并为其赋值22 - 此处不会查询原型链,所以父$ scope看不到发生了什么。
当我们在子作用域上写$scope.someObj.prop1 = 22
之类的内容时,如果JavaScript在子$ scope上找不到someObj
对象,它会查询原型链,并查看下一个$ scope。 chain是父$ scope。如果父$ scope存在someObj
,则会修改父$ scope。
正如我在评论中提到的,以下SO问题和答案更详细地解释了这一点(包含大量图片):What are the nuances of scope prototypal / prototypical inheritance in AngularJS?
答案 1 :(得分:0)