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