控制器之间的共处不适用于$ scope.broadcast和$ scope.on



我的家伙,在我的上一篇文章中,我询问如何在同一文件内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有问题吗???我无法弄清楚...

您应该使用 $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);
}

在这里查看所接受的答案

您可以在$rootScope上播放,以使整个应用程序听到它,或者如果您不想,则需要确保广播是针对$范围本身及其孩子的。总而言之,一个控制器应该是另一个孩子。

最新更新