2015-06-12 2 views
0

Я пытаюсь динамически загружать маршрут, основываясь на последнем посещении пользователем детского маршрута. Последний визит сохраняется и извлекается с использованием фабрики. в настоящее время я использую onEnter, но это вызывает загрузку родительского маршрута, а затем второй загрузку, чтобы загрузить дочерний маршрут. Есть ли способ предотвратить вторую загрузку и перейти непосредственно к дочернему маршруту, если необходимая информация есть?ui-router onEnter alternative

(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 
         }); 
        } 
       }); 
      } 
     }); 
    } 
})(); 

ответ

0

Пробуйте "Глубокое переключение состояния" на «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; 
       } 
      }); 
     } 
    }); 
+0

Вы должны опубликовать содержимое этой ссылки, так что если он идет недоступен, его содержание все еще здесь. – gustavohenke

+0

Я обновил свой ответ с помощью примерного кода –

+0

Похоже, что userSitePreferences больше не распознается при таком подходе. :(Спасибо за предложение @JeffFairley –