13

私は次の設定をしています:

stApp.controller('AdminTableController', ['$rootScope', '$scope', 'gridService', 
            function ($rootScope, $scope, gridService) {
    $scope.$watch('tableData.$pristine', function (newValue) {
        $rootScope.broadcast("tableDataUpdated", {
            state: page.$pristine
        });
    });
}])

stApp.controller('AdminGridController', ['$rootScope', '$scope', 'gridService',
            function ($rootScope, $scope, gridService) {
    $rootScope.on("tableDataUpdated", function (args) {
        //args.state would have the state.
        alert(args.state);
    });
}])

このコードを実行すると、次のメッセージが表示されます。

Object #<Object> has no method 'on'

$rootScope.on と $scope.on の両方でこれを試したことに注意してください

4

4 に答える 4

21

$broadcastand$onではなくbroadcastandを意味していたに違いありませんon

$rootScope.$broadcast("tableDataUpdated", { state: page.$pristine });
// ...
$rootScope.$on("tableDataUpdated", function (args) {
// ...

$broadcastイベントを子スコープまたは兄弟スコープに委譲するために使用されることに注意してください$emit

を選択する場合$broadcast(および を選択しない場合)、 (適切に行った$emitように)を結び付けるためにルート スコープを注入するか、ディスパッチャーの子スコープであるレシーバーの分離スコープを呼び出す必要があります。$on$on

との詳細については、この投稿を参照してください。$emit$broadcast

于 2013-07-21T18:45:58.727 に答える
7

イベントリスナーが子スコープにある場合:$scope.$broadcast('MyEvent', args);

イベントリスナーが親スコープにある場合:$scope.$emit('MyEvent', args);

$rootScope は Angular アプリケーションのすべてのスコープの親であるため、$rootScope で $broadcast を使用することで混乱を避けることができます。$rootScope.$broadcast('MyEvent', args);

$emit または $broadcast を使用するかどうかにかかわらず、受信コントローラーはリッスンします。$scope.$on('MyEvent', function() {});

于 2014-04-18T22:14:18.947 に答える
2
 $rootScope.on("tableDataUpdated", function (args) {
        //args.state would have the state.
        alert(args.state);
    });

する必要があります

 $rootScope.$on("tableDataUpdated", function (args) {
        //args.state would have the state.
        alert(args.state);
    });
于 2013-07-21T18:23:42.903 に答える
0
$scope.$emit('MyEvent', args);

最初のコントローラーから、2 番目のコントローラーで受信します。

$scope.$on('MyEvent', function() {});
于 2013-07-21T18:23:01.893 に答える