簡體   English   中英

ui-router onEnter替代

[英]ui-router onEnter alternative

我正在嘗試根據用戶對子路線的最新訪問來動態加載路線。 最近的訪問將被保存,並使用工廠進行檢索。 當前我正在使用onEnter,但這會導致加載父路由,然后發生第二次加載以加載子路由。 如果需要的信息存在,是否有辦法防止第二次負載並直接進入子路由?

(function() {
    'use strict';

    angular
        .module('curation')
        .config(routesConfig);

    routesConfig.$inject = ['$stateProvider'];
    /**
     * Route Configuration to establish url patterns for the module
     * @param {Function} $stateProvider
     */
    function routesConfig($stateProvider) {
        // Curation state routing
        $stateProvider.
        state('site.curation', {
            url: '/curation',
            templateUrl: 'modules/curation/views/curation.client.view.html',
            resolve: {
                publicFronts: function($stateParams, frontsService) {
                    return frontsService.getPublicFronts($stateParams.siteCode);
                },
                authoringTypes: function(assetMetadata) {
                    return assetMetadata.authoringTypes().then(function(value) {
                        return value.data.authoringTypes;
                    });
                }
            },
            onEnter: function($state, $timeout, userSitePreferences, publicFronts) {
                $timeout(function() {
                    var recentFront = _.find(publicFronts, {
                        Id: userSitePreferences.curation.recentFrontIds[0]
                    });
                    if (recentFront) {
                        $state.go('site.curation.selectedFront.selectedLayout', {
                            frontId: recentFront.Id,
                            layoutId: recentFront.LayoutId
                        });
                    }
                });
            }
        });
    }
})();

嘗試“ ui-router-extras”的“深度狀態重定向”。

http://christopherthielen.github.io/ui-router-extras/#/dsr

試試這樣的東西...

    $stateProvider.
    state('site.curation', {
        url: '/curation',
        templateUrl: 'modules/curation/views/curation.client.view.html',
        resolve: {
            publicFronts: function($stateParams, frontsService) {
                return frontsService.getPublicFronts($stateParams.siteCode);
            },
            authoringTypes: function(assetMetadata) {
                return assetMetadata.authoringTypes().then(function(value) {
                    return value.data.authoringTypes;
                });
            }
        },
        deepStateRedirect: {
            default: {
                state: 'site.curation.selectedFront.selectedLayout'
                params: {
                    frontId: 'defaultId',
                    layoutId: 'defaultLayout'
                }
            },
            params: true,
            // I've never tried to generate dynamic params, so I'm not sure
            // that this accepts DI variables, but it's worth a try.
            fn: function ($dsr$, userSitePreferences, publicFronts) {
                var recentFront = _.find(publicFronts, {
                    Id: userSitePreferences.curation.recentFrontIds[0]
                });
                if (recentFront) {
                    return {
                        state: $dsr$.redirect.state,
                        params: {
                            frontId: recentFront.Id,
                            layoutId: recentFront.LayoutId
                        }
                    };
                } else {
                    return false;
                }
            });
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM