我的家伙,在我的上一篇文章中,我询问如何在同一文件内2个控制器之间交流。我有一个按钮,我在ng-click中传递一个带有标签名称的名称。当我单击此按钮时,目标是在ng-click内的指定选项卡中打开一个新视图。
每个控制器都具有与ng-controller实例化的视图,因此它们不会共享相同的视图。
现在我有,
dashboardController:
数据台上的按钮:
return icon = '<center><a class="state-link" data-state-id="' + data.id + '" ng-click="setActiveTab('system')"><i style="color:#0040ff; width:21px; height:21px" title="System threshold exceed" class="fa fa-warning"></i></a></center>';
controllerScope.setActiveTab = function (name) {
console.log("setActiveTab()");
console.log("name ",name);
$rootScope.$broadcast('myCustomEvent', name);
}
dashboardDeviceController:
在这里,我有要更改的Var
controllerScope.activeTab = {
consumptions: true,
network : false,
ap : false,
modem : false,
system : false,
};
$rootScope.$on('myCustomEvent', function(event, data) {
console.log("myCustomEvent ", data);
for (var tabName in controllerScope.activeTab) {
if (controllerScope.activeTab[tabName] == data) {
controllerScope.activeTab[tabName] = data;
break;
}
}
});
我有一个问题,当我单击按钮时,什么也不会发生。因此,$ rootscope.on.on或$ rootscope.broadcast有问题吗???我无法弄清楚...
您应该使用 $scope
到 broadcast
和'subscribe,
所以,将controllerScope.$broadcast('myCustomEvent', name);
更改为$scope.$broadcast('myCustomEvent', name);
controllerScope.setActiveTab = function (name) {
console.log("setActiveTab()");
console.log("name ",name);
$scope.$broadcast('myCustomEvent', name);
}
在这里查看所接受的答案
您可以在$rootScope
上播放,以使整个应用程序听到它,或者如果您不想,则需要确保广播是针对$范围本身及其孩子的。总而言之,一个控制器应该是另一个孩子。