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

jog*_*ran 5 angularjs angularjs-scope

我找到了这个线程,其中OP的原始小提琴,其中ng-included范围不会修改其父范围.

其中一条回复表明:

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

这似乎工作.为什么是这样?

Mar*_*cok 7

由于JavaScript原型继承的工作方式,对象变量起作用.ngInclude创建自己的子范围.此子范围原型继承自父范围.

在JavaScript中,当我们$scope.x = 22在子范围内编写类似内容时,这会x在子$ scope上创建一个属性,并为其赋值22 - 这里不会查询原型链,因此父$ scope不会看到发生了什么.

当我们$scope.someObj.prop1 = 22在子范围上编写类似的东西时,如果JavaScript没有someObj在子$ scope上找到对象,它会查询原型链,并且链中的下一个$ scope是父$ scope.如果someObj存在于父$ scope上,则修改父$ scope.

正如我在评论中提到的,以下SO问题和答案更详细地解释了这一点(有大量图片):AngularJS中范围原型/原型继承的细微差别是什么?