控制器之间的通信不能与$ scope.broadcast和$ scope.on一起使用

时间:2017-09-06 13:22:37

标签: javascript angularjs

我们,在我之前的帖子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有问题吗?我想不出来......

2 个答案:

答案 0 :(得分:0)

你应该使用$scopebroadcast和`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本身及其儿童。总之,一个控制器应该是另一个控制器的子节点。