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

Dav*_*ell 3 angularjs angularjs-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>
Run Code Online (Sandbox Code Playgroud)

saveItem() 通过按钮调用,代码在制造商控制器中:

    $scope.saveItem = function () {
        $scope.ajaxOut = true;
        $scope.saveContracts();
    };
Run Code Online (Sandbox Code Playgroud)

但是函数 saveContracts() 在 contractController 中。我想从manufacturerController.saveItem() 调用contractController.saveContracts()。

根据这里我应该能够很好地调用父方法:How to call a function from another controller in angularjs?

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

geo*_*awg 6

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

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

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

范围事件传播

作用域可以以类似于 DOM 事件的方式传播事件。事件可以广播到作用域子级或发射到作用域父级。

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

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