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

更新されたPlkr

于 2013-06-26T23:41:54.943 に答える