我发现了这个线程,其中 d 范围不修改其父范围的 OP 的原始小提琴。ng-include
其中一个答复建议:
它丑陋且不可预测,因此我建议您将数据包装在对象变量中:http: //jsfiddle.net/e5rfP/3/
这似乎有效。为什么是这样?
我发现了这个线程,其中 d 范围不修改其父范围的 OP 的原始小提琴。ng-include
其中一个答复建议:
它丑陋且不可预测,因此我建议您将数据包装在对象变量中:http: //jsfiddle.net/e5rfP/3/
这似乎有效。为什么是这样?
对象变量之所以起作用,是因为 JavaScript 原型继承的工作方式。ngInclude 创建自己的子范围。这个子作用域原型继承自父作用域。
在 JavaScript 中,当我们在子作用域中编写类似的东西时$scope.x = 22
,这会在子 $scope 上创建一个x
属性并为其分配值 22 —— 这里没有参考原型链,因此父 $scope 看不到发生了什么。
当我们在子作用域上写类似的东西$scope.someObj.prop1 = 22
时,如果 JavaScript 在子 $scope 上找不到someObj
对象,它会查询原型链,而链中的下一个 $scope 就是父 $scope。如果someObj
存在于父 $scope 上,则修改父 $scope。
正如我在评论中提到的,以下 SO 问题和答案更详细地解释了这一切(有很多图片):AngularJS 中范围原型/原型继承的细微差别是什么?