0

http-auth-interceptorユーザー認証を求めるために使用しています。ui-routerまた、アプリケーションのルートを処理するために使用しています。今までは、「コア」CoreControllerという状態に関連付けられた最上位のコントローラーがありました。ui-router

アプリケーションからのすべてのルートは、このコア状態 (抽象的) の子状態です。たとえば、私はcore.user, core.user.show, core.settings, ...を持っています

resolveルートの 1 つにパラメーターを追加するまで、すべてがうまく機能していました。core.userにはresolveAPI からデータを要求するパラメーターがあり、ユーザーが正しく認証されていない場合、この API は 401 を返します。

問題は、のリスナーがevent:auth-loginRequiredCoreController (最上位コントローラー) にあることです。これは、子の状態で解決が満たされていないため、ロードされていないため、イベントがトリガーされません。

この CoreController にイベント リスナーを含めることはできないと判断し、このイベントをキャッチするためのディレクティブの実装を開始しました。現時点で私が持っているものは次のとおりです。

ログインモーダルをトリガーするために、この状態を使用していました。

            $stateProvider
            .state("main.login", {
                onEnter: function($stateParams, $state, $modal) {
                    $modal.open({
                        templateUrl: "/js/modules/user/views/login.html",
                        controller: 'LoginController',
                        backdrop: 'static',
                        keyboard: false,
                        windowClass: 'app-modal-login'
                    }).result.then(function(result) {
                        if (true == result) {
                            $state.go("main.home.map.data");
                        }
                    });
                }
            })
            ;

そして、ここに私が構築しようとしているディレクティブがあります:

    require(['app', 'modules/user/index'], function(app) {
    app.directive('loginDialog', ['$modal', function($modal) {
        return {
            templateUrl: 'modules/user/views/login.html',
            restrict: 'A',
            replace: true,
            controller: 'LoginController',
            link: function(scope, element, attributes, controller) {

                console.log('Directive loaded');

//                scope.$on('event:auth-loginRequired', function() {
//                    element.modal('show');
//                });
//
//                scope.$on('event:auth-loginConfirmed', function() {
//                    element.modal('hide');
//                    scope.credentials.password = '';
//                });
            }
        }
    }]);
});

しかし、状態プロバイダーで以前に発生したエラーが発生します。

ディレクティブ 'loginDialog' のテンプレートには、ルート要素が 1 つだけ必要です。モジュール/ユーザー/ビュー/login.html

これを処理する方法がわからない、乾杯、

マキシム

4

1 に答える 1