La mia gerarchia di stati è (dall'alto verso il basso):router UI angolare, come ottenere un elenco di antenati dello stato corrente dal controller?
root
account
account.invoices
account.invoices.detail
Quando sono in account.invoices.detail
stato in cui mi piacerebbe ottenere un elenco degli stati degli antenati:
angular
.module('app')
.controller('InvoiceDetailCtrl', ['$scope', '$state', function ($scope, $state) {
var current = $state.current.name;
// Get ancestors from current state
// Tried $state.current.parent, $state.parent, $state.parent(current)
}]);
Il router UI angolare consente di ottenere la transizione allo stato genitore (ad es. da una vista con data-ui-sref="^"
), quindi dovrebbe essere possibile ottenere questo risultato (seguire la catena di antenati fino a root
).
Ho bisogno di questo per creare una funzionalità simile a breadcrumb.
EDIT: è conclusa con questo, grazie alla risposta accettata:
var current = $scope.$state.$current,
parent = current.parent,
ancestors = [current.name];
while (typeof parent != 'undefined' && parent.name.length) {
ancestors.push(parent.name);
parent = parent.parent;
}
se si chiede il motivo per cui il controllo per parent.name.length
è perché c'è qualcosa di simile a uno stato di "root" in angolare UI (can non avere alcuna documentazione su).
Come hai detto, puoi farlo interrogando i genitori o i genitori e compilando la lista da solo. AFAIK non esiste un metodo che restituisca un elenco di antenati per uno stato particolare. – Wawy
@Wawy come faccio a interrogare il genitore dello stato attuale? Dall'interno del controller intendo ... – gremo