0

如何在控制器之间广播消息?跨AngularJS控制器广播吗?

这是我曾尝试:

function Ctrl1($scope) { 
    $scope.$broadcast('Update'); 
} 

Ctrl1.$inject = ['$scope']; 

function Ctrl2($scope) { 
    $scope.updated = false; 
    $scope.$on('Update', function() { 
     $scope.updated = true; 
    }); 
} 

Ctrl2.$inject = ['$scope']; 

要看到它在运行:view the Plnkr

回答

0

它取决于作用域的层次结构,因此取决于你在dom中引导Ctrl1和Ctrl2的位置。

说Ctrl1是Ctrl2的父级。 $ broadcast将事件传送给子范围:在这种情况下,Ctrl2会注意到它(使用$ on)。

如果您需要将事件从Ctrl2传输到Ctrl1,请使用$ emit将事件传输到父范围。

1

而不是使用$broadcast()共享服务和$watch()可能是一个更好的选择。

var myApp = angular.module('myApp', []); 

myApp.factory("MyService", function() { 
    return { 
     updated: false 
    }; 
}); 

function Ctrl1($scope, MyService, $timeout) { 
    $timeout(function() { //Some work occurs and sets updated to true 

     MyService.updated = true; 

    }, 1000) 
} 

Ctrl1.$inject = ['$scope', "MyService", "$timeout"]; 

function Ctrl2($scope, MyService) { 
    $scope.$watch(function() { 
     return MyService.updated; 
    }, function (oldValue, newValue) { 
     $scope.updated = MyService.updated; 
    }); 
} 

Ctrl2.$inject = ['$scope', "MyService"]; 

Updated Plnkr