【问题标题】:AngularJS: modifying parent scope in ng-includeAngularJS:在 ng-include 中修改父范围
【发布时间】:2013-02-20 02:55:14
【问题描述】:

我发现这个线程,其中 OP 的 original fiddle ng-included 范围没有修改其父范围。

其中一个回复建议:

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

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

【问题讨论】:

标签: angularjs angularjs-scope


【解决方案1】:

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

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

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

正如我在评论中提到的,以下 SO 问题和答案更详细地解释了这一切(有很多图片):What are the nuances of scope prototypal / prototypical inheritance in AngularJS?

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 2015-05-20
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      相关资源
      最近更新 更多