为了账号安全,请及时绑定邮箱和手机立即绑定

AngularJS-访问子范围

AngularJS-访问子范围

吃鸡游戏 2019-10-06 14:58:56
如果我有以下控制器:function parent($scope, service) {    $scope.a = 'foo';    $scope.save = function() {        service.save({            a:  $scope.a,            b:  $scope.b        });    }}function child($scope) {    $scope.b = 'bar';}parent读b出的正确方法是child什么?如果有必要定义b中parent,也不会使它语义上不正确假设b是描述相关的东西的属性child,而不是parent?更新:对此进行进一步的思考,如果有一个以上的孩子b,将会parent在b检索上产生冲突。我的问题是,什么是访问的正确方法是b从parent?
查看完整描述

4 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

尽管jm-的答案是处理这种情况的最佳方法,但为了将来参考,可以使用范围的$$ childHead,$ childTail,$ nextSibling和$$ prevSibling成员来访问子范围。这些没有记录在案,因此它们可能会在不通知的情况下进行更改,但是如果您确实需要遍历作用域,它们就在那。


// get $$childHead first and then iterate that scope's $$nextSiblings

for(var cs = scope.$$childHead; cs; cs = cs.$$nextSibling) {

    // cs is child scope

}


查看完整回答
反对 回复 2019-10-06
?
慕沐林林

TA贡献2016条经验 获得超9个赞

您可以尝试以下方法:


$scope.child = {} //declare it in parent controller (scope)

然后在子控制器(作用域)中添加:


var parentScope = $scope.$parent;

parentScope.child = $scope;

现在,父母可以访问孩子的范围了。


查看完整回答
反对 回复 2019-10-06
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

一种可能的解决方法是使用init函数将子控制器注入到父控制器中。


可能的实现:


<div ng-controller="ParentController as parentCtrl">

   ...


    <div ng-controller="ChildController as childCtrl" 

         ng-init="ChildCtrl.init()">

       ...

    </div>

</div>

ChildController您在哪里:


app.controller('ChildController',

    ['$scope', '$rootScope', function ($scope, $rootScope) {

    this.init = function() {

         $scope.parentCtrl.childCtrl = $scope.childCtrl;

         $scope.childCtrl.test = 'aaaa';

    };


}])

因此,现在ParentController您可以使用:


app.controller('ParentController',

    ['$scope', '$rootScope', 'service', function ($scope, $rootScope, service) {


    this.save = function() {

        service.save({

            a:  $scope.parentCtrl.ChildCtrl.test

        });

     };


}])

重要提示:

要正常工作,您必须使用指令ng-controller并使用as与我在html eg中相同的方式重命名每个控制器。


提示:在此过程中,

请使用chrome插件ng-inspector。它会帮助您理解树。


查看完整回答
反对 回复 2019-10-06
  • 4 回答
  • 0 关注
  • 567 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信