繁体   English   中英

从父控制器调用子控制器中的函数

[英]Calling function in child controller from parent controller

我有一个嵌套在另一个控制器中的控制器。

<div ng-controller="manufacturerController" ng-cloak>
    <div ng-controller="contractController" ng-cloak>
        <div data-ng-if="item" class="panel panel-default">
            <div class="panel-heading text-center">
                <span class="h3">Contract</span>
            </div>
        </div>
    </div>
    <button data-ng-if="item && !ajaxOut" class="btn btn-success" data-ng-click="saveItem()">Save</button>
</div>

通过按钮调用saveItem(),代码在ManufacturerController中:

    $scope.saveItem = function () {
        $scope.ajaxOut = true;
        $scope.saveContracts();
    };

但是功能saveContracts()在contractController中。 我想从ManufacturerController.saveItem()调用contractController.saveContracts()。

根据这里,我应该能够很好地调用父方法: 如何从angularjs中的另一个控制器调用函数?

但是这种保存使浏览器冻结了。 我在做什么错,我该如何解决?

一种方法是广播范围内的事件:

function ParentController($scope) 
{
  $scope.$broadcast('someEvent', args);
}

function ChildController($scope) 
{
  $scope.$on('someEvent', function(event, args) {});
  // another controller or even directive
}

范围事件传播

范围可以以与DOM事件类似的方式传播事件。 该事件可以被广播到范儿或发射到范围的父母。

— AngularJS开发人员指南-范围事件传播

有关更多信息,请参阅一个控制器可以呼叫另一个控制器吗?

您可以使用$ broadcast从父母到孩子:

function ParentCntl($scope) {

    $scope.msg = "";
    $scope.get = function(){
        $scope.$broadcast ('someEvent');
        return  $scope.msg;        
    }
}

function ChildCntl($scope) {               
    $scope.$on('someEvent', function(e) {  
        $scope.$parent.msg = $scope.get();            
    });

    $scope.get = function(){
        return "xyz";    
    }
}

查找“ $ emit $ broadcast angularjs中的$”。 大量的例子在那里。

(正如我之前在评论中所述,您不希望控制器之间相互了解。一个人调度一个事件/通知,另一个人听到它,就像是一个您不认识的人只是站在一个房间里然后喊出您感兴趣的名字)。

每个都用于不同的上下文。 根据您在做什么,您可以使用其中之一。 对AngularJS开发人员(以及对任何UI开发人员的总体概念)而言,了解这些内容都至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM