调用子控制器的方法

时间:2014-04-29 17:29:19

标签: angularjs

我有两个像这样的控制器

<div ng-controller="ParentController">
    <div ng-controller="ChildController">
    ... my grid table ..
    </div>
</div>

js code

function ParentController($scope) {
 ...
 $scope.refreshBtnClicked = function() {
    //here I want to call refreshGrid method of ChildController
 }
}
function ChildController($scope) {
 ...
 $scope.refreshGrid = function() {
 ... its using some inner variables of Child controller...
 }
}

我怎么称呼它?

3 个答案:

答案 0 :(得分:1)

尝试这种方式,你必须实现你的服务功能,但这基本上是网格的东西。

<div ng-controller="ParentController">
    <div ng-controller="ChildController">
    ... my grid table ..
    </div>
</div>

function ParentController($scope, gridService) {
 ...
 $scope.refreshBtnClicked = gridService.refresh();
}
function ChildController($scope, gridService) {
 ...
 do whatever you like with your gridService methods or properties.
}

your factory or service 
angular.module('myApp')
  .service('Gridservice', function Gridservice() {
    //data and methods here
  });

您还可以使用broadcast或emit来触发控制器之间的事件。就像刷新一样,你的子控制器数据也会更新。

答案 1 :(得分:0)

使用指令,您可以在父级中“注册”子控制器或作用域。像这样:

app.directive('parent', function(){
    controller: function(){
        this.children = [];
        this.addChild = function(childScope){
            this.children.push(childScope);
        }
        this.callChildFunc = function(childID){
            children[childID].someFunc();
        }
    };


})


app.directive('child', function(){
    require: '^parent',
    link: (scope, elem, attrs, parentCtrl) {
        parentCtrl.addChild(scope)  
        scope.someFunc = function(){};
    }
})

子进程调用一个函数,该函数在父对象中添加对其作用域的引用,以便它可以调用其函数。另一种选择是在父控制器中使用$scope而不是this,并使用隔离范围将addChild函数传递给子域的范围。

答案 2 :(得分:0)

嗯,你必须以AngularJS的方式做这些事情。如果您想要跨控制器共享方法或想法,则应将其实现为工厂或服务。然后您可以使用emit或broadcast在控制器之间同时共享此服务。

Can one controller call another?