5

我发现了这个线程,其中 d 范围不修改其父范围的 OP 的原始小提琴ng-include

其中一个答复建议:

它丑陋且不可预测,因此我建议您将数据包装在对象变量中:http: //jsfiddle.net/e5rfP/3/

这似乎有效。为什么是这样?

4

2 回答 2

7

对象变量之所以起作用,是因为 JavaScript 原型继承的工作方式。ngInclude 创建自己的子范围。这个子作用域原型继承自父作用域。

在 JavaScript 中,当我们在子作用域中编写类似的东西时$scope.x = 22,这会在子 $scope 上创建一个x属性并为其分配值 22 —— 这里没有参考原型链,因此父 $scope 看不到发生了什么。

当我们在子作用域上写类似的东西$scope.someObj.prop1 = 22时,如果 JavaScript 在子 $scope 上找不到someObj对象,它会查询原型链,而链中的下一个 $scope 就是父 $scope。如果someObj存在于父 $scope 上,则修改父 $scope。

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

于 2013-02-20T04:10:21.280 回答
0

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

这是我为它创建的 Repo 的链接。

我的答案基于这个 SO 答案 祝你好运:-)

于 2014-10-06T21:33:48.700 回答