AngularJS:修改ng-include中的父范围

时间:2013-02-20 02:55:15

标签: angularjs angularjs-scope

我发现了这个线程,其中original fiddleng-include范围不会修改其父范围。

其中一条回复表明:

  

它很丑陋且不可预测,所以我建议你将数据包装在一个对象变量中:http://jsfiddle.net/e5rfP/3/

似乎有用。这是为什么?

2 个答案:

答案 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)

该指令将包含部分而不创建新范围。例如,您可以在父控制器的部分和控件中创建表单。

这是我为它创建的link to the Repo

我的答案基于this S.O. answer 祝你好运: - )