0

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

这是我尝试过的:

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'];

要查看它运行:查看 Plnkr

4

2 回答 2

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"];

更新了 Plnkr

于 2013-06-26T23:41:54.943 回答
0

它取决于范围层次结构,因此取决于您在 dom 中引导 Ctrl1 和 Ctrl2 的位置。

假设 Ctrl1 是 Ctrl2 的父级。$broadcast 会将事件传输到子作用域:在这种情况下 Ctrl2 会注意到它(使用 $on)。

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

于 2013-06-26T21:49:51.173 回答