3

私は ui-router を使用しており、独自のコントローラーを持つコントローラーと子ビューを持つ親ビューを使用している構成があります。子ビューの 1 つに移動するたびに、親コントローラーが再度インスタンス化されるため、サーバーに対して不要な要求が実行されます。子の状態間を移動し、親コントローラーによって解決された変数を再利用できるようにしたいと考えています。

親コントローラーが毎回インスタンス化されないようにするにはどうすればよいですか?

これは私のルーティング設定です:

$stateProvider
    .state('researchLayoutEditor', {
        url: '/research/:researchId/layoutEditor/:orderInGroup',
        controller: 'layoutEditorController',
        controllerAs: 'layoutEditorCtrl',
        templateUrl: 'app/researchManagement/researchLayoutEditor/layoutEditor.html',
        redirectTo: 'researchLayoutEditor.slide',
        params: {
            group: 'A',
            orderInGroup: '0'
        },
        resolve: {
            researchLayout: function (researchesService, $stateParams) {
                return researchesService.getResearchLayout($stateParams.researchId, false);
            },
            research: function (researchesService, $stateParams) {
                return researchesService.getResearch($stateParams.researchId);
            }
        }
    }).state('researchLayoutEditor.slide', {
        url: '/textual',
        templateUrl: 'app/researchManagement/researchLayoutEditor/textSlide.html',
        controller: 'textSlideController',
        controllerAs: 'txtSlide'
    }).state('researchLayoutEditor.movie', {
        url: '/video',
        templateUrl: 'app/researchManagement/researchLayoutEditor/movieSlide.html',
        controller: 'movieSlideController',
        controllerAs: 'movieSlide',
        resolve: {
            movieCategories: function (utilsService) {
                return utilsService.getVideoCategories();
            }
        }
    }).state('researchLayoutEditor.memory', {
        url: '/memory',
        templateUrl: 'app/researchManagement/researchLayoutEditor/memorySlide.html',
        controller: 'memorySlideController',
        controllerAs: 'memorySlide'
    }).state('researchLayoutEditor.question', {
        url: '/question',
        templateUrl: 'app/researchManagement/researchLayoutEditor/questionSlide.html',
        controller: 'questionSlideController',
        controllerAs: 'questionSlide'
    });

これが HTML です。

<div id="mainContent">
    <!-- our nested state views will be injected here -->
    <div ui-view class="inner-content"></div>
</div>
4

2 に答える 2

0

さて、削除によるデバッグの最も役立つ方法を試したところ、URL の作成方法に問題があることがわかりました。私の親の状態では、次のように定義された URL がありました。

url: '/research/:researchId/layoutEditor/:orderInGroup',

子ステートをクリックするたびに orderInGroup パラメータが変更されたとき。したがって、最終的な URL は次のようになります。

.../#/research/37/layoutEditor/1/ビデオ

どうやら、「orderInGroup」パラメーターの場所を変更してURLの最後に配置した後

.../#/research/37/layoutEditor/video/1

そして移動

                params: {
                    group: 'A',
                    orderInGroup: '0'
                }

子州にも反対し、問題は解決されました。したがって、最終的に機能する URL 構成は次のようになりました ( /:orderInGroupを子状態に移動しました)。

$stateProvider
            .state('researchLayoutEditor', {
                url: '/research/:researchId/layoutEditor',
                controller: 'layoutEditorController',
                controllerAs: 'layoutEditorCtrl',
                templateUrl: 'app/researchManagement/researchLayoutEditor/layoutEditor.html',
                redirectTo: 'researchLayoutEditor.slide'
            })
            .state('researchLayoutEditor.movie', {
                url: '/video/:orderInGroup',
                templateUrl: 'app/researchManagement/researchLayoutEditor/movieSlide.html',
                controller: 'movieSlideController',
                controllerAs: 'movieSlide',
                params: {
                    group: 'A',
                    orderInGroup: '0'
                }
            })
            .state('researchLayoutEditor.slide', {
                url: '/textual/:orderInGroup',
                templateUrl: 'app/researchManagement/researchLayoutEditor/textSlide.html',
                controller: 'textSlideController',
                controllerAs: 'txtSlide',
                params: {
                    group: 'A',
                    orderInGroup: '0'
                }
            });
于 2016-01-05T15:25:08.903 に答える
0

親状態を抽象として使用してみてください。ここにplnkr例があります。チェックしてください

于 2015-12-23T19:28:09.863 に答える