9

$rootScope.$broadcast イベントが発生しないという問題があります。

App.run(function($rootScope){
    var text = 'Not So Static Now';
    $rootScope.$broadcast('event:staticText', text);
}).$inject = ['$rootScope'];


App.controller('Ctrl1', function($scope, $rootScope) {
   $scope.staticText = "Static Text";

    var things = [
        'AngularJS',
        'StackOverflow',
        'JSFiddle'
    ];

    $scope.$emit('event:things', things);

    $scope.$on('event:staticText', function(e, args){
        $scope.staticText = args;
    });

}).$inject = ['$scope', '$rootScope'];

上記は {{staticText}} 出力を 'Not so Static Now' に変更する必要がありますが、そうではありません。

問題を示すために JSFiddle を作成しましたhttp://jsfiddle.net/flavrjosh/uXzTV/

これは、ページが更新された後に IE9 がイベントを発生させない場所をデバッグしようとしている大きな問題の一部です (最初は機能しますが、更新時に F5 または更新ボタンを押しても何も起こりません)。

ヘルプ/アドバイスをいただければ幸いです

4

1 に答える 1

22

$rootScope.$broadcast イベントが発生したときに Child スコープが設定されていないことが原因で問題が発生したようです。

以下を使用して例を解決しました。

App.run(function($rootScope, $timeout){
    var text = 'Not So Static Now';

    $timeout(function(){
        $rootScope.$broadcast('event:staticText', text);
    }, 100);
}).$inject = ['$rootScope'];

と:

App.controller('Ctrl1', function($scope, $rootScope) {
    $scope.staticText = "Static Text";

    var things = [
        'AngularJS',
        'StackOverflow',
        'JSFiddle'
    ];

    $scope.$emit('event:things', things);

    $scope.$on('event:staticText', function(e, args){
        $scope.$apply(function(){
            $scope.staticText = args;
        });
    });

}).$inject = ['$scope', '$rootScope'];

ここで見ることができます

これが最善の解決策かどうかはわかりませんが、うまくいきます。

于 2012-11-15T14:36:36.720 に答える