1

次のように角度でページタイトルを定義したい:

標準PageController:

angular.module('admin').controller('AdminController',
    function($scope) {

        // emit an event to rootscope
        $scope.$emit('setPageTitle','Administration');
    }
);

次に実行ブロックで:

angular.module('core').run(function($rootScope){
    $rootScope.$on('setPageTitle',function(evt,title){
        $rootScope.$broadcast('setPageTitle',title);   // The error is thrown from this line
    });
});

そして最後にPageHeaderController

angular.module('core').controller('PageHeaderController',
    function($scope) {

        $scope.$on('setPageTitle',function(evt, title){
            $scope.pageTitle = title;
        });
    }
);

$rootScopeこのように、 eachPageControllerに注入する必要はありませんが、$scopeそれは他のタスクによく使用されます。

しかし、2 番目のコード ブロックの上記の行でこのエラーが発生します。

RangeError: 最大呼び出しスタック サイズを超えました

ここで何が問題なのですか? ここで無限ループの原因がわかりません。これらの手順を実行しただけだと思う​​からです。

  • 子から放出
  • rootscope で処理し、子にブロードキャストする
  • 特定の子で処理する
4

3 に答える 3

2

ここでの理由は、$rootScope には、それ自体でブロードキャストされたイベントをキャッチする機能があるためです。したがって、無限ループが発生しました。

$rootScope の $emit、$broadcast、$on の動作に関する非常に明確な説明を次に示します。

于 2016-06-24T04:08:22.927 に答える
1
$rootScope.$on('setPageTitle',function(evt,title){
    $rootScope.$broadcast('setPageTitle',title);   // The error is thrown from this line
});

これが原因ですか?方向をトレースするために、個別のイベント名を付けてみてください。

于 2015-07-21T09:17:15.077 に答える