2017-03-20 1 views
1

Wie erhalte ich Parameter für einen Status von einem Service? Ich habe diesen Zustand:So erhalten Sie die Parameter des ui-router-Status aus aufgelösten Daten in angularjs

.state('cashbox.list', { 
     title: 'Cashbox', 
     url: '/:from/:to?q', 
     templateUrl: '/cashbox_list.html', 
     controllerUrl: 'controllers/CashboxCtrl.js', 
     controller: 'CashboxCtrl', 
     controllerAs: 'mainCtrl', 
     params: { 
      from: getCashboxParamFrom, 
      to: getCashboxParamTo 
     }, 
     resolve: { 
      cashboxData: getTransactionsData 
     } 
    }) 



    function getTransactionsData($stateParams) 
    { 
     return CashboxService.getTransactions($stateParams.from, $stateParams.to); 
    } 

Nun mein Problem ist, dass params von und - sind dynamisch und werden von einem anderen Dienst geholt. Ich brauche etwas wie eine Entschlossenheit vor der Entschlossenheit, die Params zu bekommen. Ich habe bereits versucht, mit Versprechungen in getCashboxParamTo/Von zu arbeiten, aber die App stoppt dann Routing beim Übergang in den Status. Außerdem wurde versucht, einen übergeordneten Status mit redirectTo in untergeordneten Status zu verwenden, aber nichts zu finden, wie stateparams dynamisch aus aufgelösten Daten im übergeordneten Status erstellt werden kann.

 .state('cashbox', { 
      title: trns('title.cashbox_list'), 
      url: '/cashbox', 
      redirectTo: { 
       state: 'cashbox.list', 
       params: HERE DATES FROM RESOLVE 
      }, 
      resolve: { 
       dates: getFromToDates 
      } 
     }) 

Lösungen mit state.go werden nicht funktionieren, wie ich in einen renne Ausgabe ‚Der Übergang durch eine andere Übergang ersetzt worden‘.

+0

Wie über Sie zwei Revolver erstellen, und stellen Sie eine Abhängigkeit von dem anderen. Also, der zweite wird warten, bis der erste fertig ist, das ist der Weg, um Params zu bekommen, bevor der Dienst im zweiten Resolver aufgerufen wird. – mbeso

+0

Ich brauche diese Umleitung, da die resultierende URL zum Deeplinking benötigt wird. Verschachtelte Auflösungen bringen korrekte Daten für den Status, aber Browseradressen sollten die zugrunde liegenden Parameter anzeigen. – HarpoMarx69

Antwort

0

Die Antwort ist, zwei Zustände zu erklären cashbox und cashbox.list. umleiten dann in einem onStart Übergang Haken nach Daten aus dem Dienst zu holen:

$transitions.onStart({to: 'cashbox'}, function (trans) 
    { 
     var curMonth = gfService.getCurrentMonth(); 
     return $state.target('cashbox.list', {from: curMonth.dateFrom.string, to: curMonth.dateTo.string}) 
    }); 
Verwandte Themen