2015-02-19 37 views
8

Benim devletler hiyerarşisi (yukarıdan aşağıya): Ben account.invoices.detail durumda olduğumdaKöşeli UI yönlendirici, denetleyiciden mevcut durumun atalarının listesini nasıl alabilirim?

  1. root
  2. account
  3. account.invoices
  4. account.invoices.detail

İsterdim Ataların durumları listesi:

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

Köşeli UI yönlendirici, ana duruma geçiş yapmanızı sağlar (ör. data-ui-sref="^" ile bir görünümden, bu yüzden bunu başarmak mümkün olmalıdır (root'a kadar olan ataların zincirini takip edin).

Otomatik ekmek kırığı benzeri işlevler oluşturmak için buna ihtiyacım var.

DÜZENLEME:

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

Eğer parent.name.length onay Açısal arayüzünde bir "kök" devlet gibi bir şey (olduğundan neden onun can sorarsanız: bununla kabul edilen yanıt sayesinde sona erdi hakkında herhangi bir belge almayın). Kumandanızda olarak

+0

Dediğiniz gibi, ebeveynleri veya ebeveynleri sorgulayarak ve listeyi kendiniz oluşturarak yapabilirsiniz. AFAIK, belirli bir devlet için ataların listesini döndüren bir yöntem yoktur. – Wawy

+0

@Wawy Mevcut durumun ebeveyini nasıl sorgularım? Denetleyicinin içinden demek istediğim ... – gremo

cevap

11

$state.$current.includes göz at; Geçerli ve üst durumlara uyan tuşlarla bir nesneyi döndürür. Bunların hepsinin $state.includes() testini geçeceğine inanıyorum.

+2

Aradığım şey, çok teşekkürler! '.includes' yerine' .parent' kullandım. – gremo

+0

Doğru görünüyorsun :). – Wawy

1

:

function getParentList(state) { 
var parentList = []; 
var state = state.parent; 
while(state) { 
    parentList.push(state.toString()); 
    state = state.parent; 
} 
return parentList; 
} 

var parents = getParentList($state.$current); 
+1

Evet ama 'state.parent'' undefined' 'parent.child '(nokta notasyonu) gösterimini kullandığınızda. – gremo

İlgili konular