我们,在我之前的帖子here中,我问如何在同一个文件中的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:
这里我有我想要改变的
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或$ rootScope.broadcast有问题吗?我想不出来......
答案 0 :(得分:0)
你应该使用$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);
}
答案 1 :(得分:0)
查看已接受的答案here
您可以在$rootScope
上播放,让整个应用听到它,或者如果您不想,您需要确保广播是针对$ scope本身及其儿童。总之,一个控制器应该是另一个控制器的子节点。