我有两个像这样的控制器
<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...
}
}
我怎么称呼它?
答案 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在控制器之间同时共享此服务。