调用指令控制器';AngularJS中来自父控制器的s方法

调用指令控制器';AngularJS中来自父控制器的s方法,angularjs,Angularjs,我使用的是AngularJS,我有一个指令,它有自己的控制器。它继承父控制器的作用域 作为一个例子,考虑如下: function ParentCtrl() { $scope.aMethod = function() { // DO SOMETHING }; } function ChildCtrl() { $scope.bMethod = function() { // DO SOMETHING ELSE } } 现在,Pa

我使用的是AngularJS,我有一个指令,它有自己的控制器。它继承父控制器的作用域

作为一个例子,考虑如下:

function ParentCtrl() {
    $scope.aMethod = function() {
        // DO SOMETHING
    };
}

function ChildCtrl() {
    $scope.bMethod = function() {
        // DO SOMETHING ELSE
    }
}  
现在,ParentCtrl()的
$scope.aMethod
由ng click指令触发。我要做的是调用ChildCtrl()的
$scope.b方法。我怎么做

编辑:更多信息。与ParentCtrl关联的模板有一个按钮和多个指令。每个指令加载一个具有不同输入集的表单。单击ParentCtrl模板中的按钮时,通过
ng开关on
ng开关When
逐个加载指令
当用户单击按钮时,属于指令的ChildCtrl将以各自的形式存储数据。
因此,单击按钮时:
1.ChildCtrl保存与已加载的当前指令关联的模型。
2.ParentCtrl加载序列中的下一个指令。

ng单击
将绑定到与ParentCtrl关联的按钮。但是,单击该按钮时,ChildCtrl还需要执行一些操作(保存表单数据)。如何做到这一点?

请看以下内容

我使用的是
$broadcast
的概念。 我已经厌倦了复制您给出的场景,如父控制器、具有自己控制器的子指令等:

var animateAppModule=angular.module('animateApp',[])
animateAppModule.controller('tst',函数($scope){
$scope.test=函数(){
$scope.$broadcast('clickMessageFromParent'{
数据:“给孩子一些味精”
})
}
}).directive('myDirective',function(){
返回{
控制器:功能($scope){
},
链接:功能($scope,element){
$scope.$on('clickMessageFromParent',函数(scopeDetails,msgFromParent){
//console.log(msgFromParent)
元素[0]。innerHTML=msgFromParent.data;
})
}
}
})

这与rajkamal所说的类似,因为您需要使用广播。。。但是,您需要动态地将广播更改为以您需要的任何孩子为目标

下面是代码:

app.controller('MainCtrl',函数($scope){
//向所选子级广播的方法。
$scope.broadcastToSelectedChild=函数(){
$scope.broadcast('call-'+$scope.broadcastTo));
};
});
应用程序指令('testDir',函数(){
返回{
限制:'E',
范围:{
“名称”:“@”
},
模板:{{name}}调用:{{{called}},
链接:功能(范围、要素、属性){
scope.called=false;
//要调用的子函数。
scope.childFunction=函数(){
scope.called=true;
};
//设置要用作侦听事件的名称。
var去除;
范围:$watch('name',函数(v){
if(removeOn)removeOn();
removeOn=scope.$on('call-'+scope.name,function(){
scope.childFunction();
});
});
}
};
});
这里是HTML格式:


测试

我在这里所做的是创建一种机制,通过它我可以命名我的指令,然后按名称向它们广播。如果代码不是自解释的,请告诉我。我希望这有帮助。

你不能。但是父作用域属性上的服务或
$watch
也可以实现同样的功能。你能提供关于你的用例的更多细节吗?@JoshDavidMiller当然。编辑我的问题以反映同样的情况…你能发布一个超级简单的Plunk来确定核心问题空间吗?我还没有尝试过这个,但我发现了一个问题。我有多个将按顺序加载的指令,也就是说,当单击按钮时,将加载一个新指令。如果所有指令都响应
clickMessageFromParent
事件,则不可行。我只希望当前的子控制器响应-会这样吗?只需将侦听器附加到您希望从父控制器侦听的指令。这对于从控制器调用指令非常有效。通过boradcast调用子控制器方法是否好?我们不应该注射吗?