【问题标题】:AngularJS nested scopes and altering $parent scope variablesAngularJS 嵌套范围和更改 $parent 范围变量
【发布时间】:2014-03-31 15:48:39
【问题描述】:

抱歉,如果之前有人问过这个问题,我在 SO 上找不到任何东西,我希望得到一些澄清(或一个漂亮的技巧)

给定

<div ng-controller="Parent"> 
    <div ng-controller="Child">
        //child manipulation of parent scope object
    </div>
</div>

Parent 设置 json 对象,因此它可用于多个子范围 -

$scope.persistentData = getAJSONObject();

子作用域想要进行一些计算并更新它从父作用域继承的本地 json 对象的键 -

doCalculations( $scope.persistentData.keyIWantToAlter )

我是否需要将父作用域显式分配给子作用域中的计算函数的结果(如下所示),还是有一种方法可以仅使用子作用域的继承作用域对象将更改传播到父作用域?

$parent.$scope.$persistentData.keyIWantToAlter = 
    doCalculations( $scope.persistentData.keyIWantToAlter) 

【问题讨论】:

  • 请考虑改写,目前确实很难按照您的要求进行。
  • 希望我没有让事情变得更糟
  • 更清楚.. 是getAJSONObject async 吗?
  • 它是异步的,但已通过解析提供,因此一旦父作用域初始化,它不应被视为这样
  • 最后一个?在doCalculations 里面,你有没有像$scope.persistentData = ... 这样的事情

标签: javascript angularjs scope


【解决方案1】:

我看不出您提供的简介有任何问题,您需要提供更多信息。我可以提醒您不要尝试在范围内“共享”嵌套对象。

This fiddle 说明了如果您在孩子中并且“覆盖”引用会发生什么。 json2 表明它们开始时相同,但我覆盖了子范围中的引用,现在变量已分离。

我认为您遇到了类似的问题,但在您提供更多信息之前无法证明这一点。

<div ng-controller="ParentCtrl">
  Hello, {{json2}}!
    <div ng-controller="ChildCtrl">
          Hello, {{json2}}!
    </div>
</div>



function ParentCtrl($scope) {
    $scope.json2 = {
         child:{
            name: 'parent'
        }
    }

}

function ChildCtrl($scope, $timeout) {

    $scope.json2 = {
         child:{
            name: 'child'
        }
    }

    $timeout(function(){
         $scope.json2.child.name= 'nick';
     },5000);
}

【讨论】:

  • 感谢它确实是一个愚蠢的覆盖,我没有发现这让我认为即使明确的 $parent 引用很丑陋,从长远来看它们可能更安全
  • 使用服务 ;) 当您依赖嵌套范围时,您可能会遇到各种问题。
  • 谢谢,我必须调查一下,你会向父控制器提供服务还是我应该完全在控制器之外考虑?
猜你喜欢
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多