2014-11-14 8 views
5

Bazı API verilere dayanarak farklı durumlar sunması gereken bir uygulama var. Uygulamamın devlet yapılandırması aşağıdaki gibiyse UI yönlendiricinin varsayılan durumu dinamik olarak nasıl değiştirilir?

$stateProvider.state('order', { 
    url: '/order/{serviceId}', 
    controller: 'OrderController', 
    abstract: true, 
    resolve: { 
     OrderResolve: function(Order, $stateParams){ 
      return Order.fetch($stateParams.serviceId); 
     } 
    } 

}).state('order.sharepoint', { 
    url: '/sharepoint', 
    abstract: true, 
    controller: 'SharePointController' 

}).state('order.sharepoint.index', { 
    url:'', 
    controller: 'SharePointServiceController' 

}).state('order.sharepoint.setup', { 
    url:'', 
    controller: 'SharePointSetupController' 

}).state('order.sharepoint.confirm', { 
    url:'', 
    controller: 'SharePointConfirmController' 
}); 

Sonra 1 2 halleri kapalı OrderResolve nesnesindeki değerlerin esas öndeğer olmak istiyorum. Temel olarak, bu kullanıcının SharePoint hizmetinin etkin olup olmadığını anlatan API verilerini almak için resolve kullanın. OrderResolve.hasSharepoint == true sonra order.sharepoint.index durumuna varsayılan, ancak OrderResolve.hasSharepoint == false ise order.sharepoint.setup durumuna varsayılan yapmak istiyorum. İlk durum, SharePoint verilerini gösterir ve ikinci durum, Sharepoint hizmetlerini "kurmaya" yönelik bir formdur.

Bu tür bir işlevsellik elde etmenin basit bir yolu var mı?

+0

, ui-yönlendirici bu durumda olan $ stateProvider ilk durumunu seçmek gibi görünüyor "order.sharepoint.index" bu yüzden "index" i her defasında yükleyebildim ve gerekirse sadece 'index' denetleyicisinden 'setup' durumuna yeniden yönlendirebilirdim .. bu sadece hacky hissediyor –

+0

Çalışmasını sağladın mı? Bende aynı problem var, bulduysanız cevabı göndermek güzel olurdu. – gfpacheco

cevap

0

Bir orta duruma ihtiyacınız var ve sizde zaten var. 'u order.sharepoint'dan kaldırırsanız ve her zaman OrderResolve çözüm değerinizden bağımsız olarak bu duruma gidin.

Sonra SharePointController size OrderResolve erişebilir ve hedefinizin durumunu karar edebilirsiniz: Varsayılan olarak

// inside SharePointController 

if (OrderResolve.hasSharepoint == true){ 
    $state.go('order.sharepoint.index'); 
else { 
    $state.go('order.sharepoint.setup'); 
}