[英]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.