2015-02-19 22 views
8

hệ thống phân cấp tiểu bang của tôi là (từ trên xuống dưới):Bộ định tuyến giao diện người dùng góc, cách lấy danh sách tổ tiên của trạng thái hiện tại từ bộ điều khiển?

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

Khi tôi đang ở trong trạng thái account.invoices.detail Tôi muốn nhận danh sách các quốc gia tổ tiên:

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

Bộ định tuyến giao diện người dùng góc cho phép bạn chuyển sang trạng thái gốc (tức là từ một cái nhìn với data-ui-sref="^"), vì vậy nó sẽ có thể đạt được điều này (theo dõi chuỗi tổ tiên lên đến root).

Tôi cần điều này để tạo chức năng giống như đường dẫn tự động.

EDIT: đã kết thúc với điều này, nhờ vào các câu trả lời được chấp nhận:

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

Nếu bạn hỏi tại sao việc kiểm tra cho parent.name.length của nó bởi vì có cái gì đó giống như một "gốc" nhà nước tại góc giao diện người dùng (có thể 't nhận được bất kỳ tài liệu về).

+0

Như bạn đã nói, bạn có thể làm điều đó bằng cách thẩm vấn cha mẹ hoặc cha mẹ và tự xây dựng danh sách. AFAIK không có phương thức trả về danh sách tổ tiên cho một trạng thái cụ thể. – Wawy

+0

@Wawy làm thế nào để tôi thẩm vấn cha mẹ của nhà nước hiện tại? Từ bên trong bộ điều khiển, tôi có nghĩa là ... – gremo

Trả lời

11

Có một cái nhìn tại $state.$current.includes; nó xuất hiện để trả về một đối tượng có các khóa khớp với trạng thái hiện tại và trạng thái gốc. Tôi tin rằng đây là tất cả các tiểu bang sẽ vượt qua bài kiểm tra $state.includes().

+2

Điều tôi đang tìm kiếm, cảm ơn rất nhiều! Tôi đã sử dụng '.parent' thay vì' .includes'. – gremo

+0

Bạn có vẻ đúng :). – Wawy

1

Trong điều khiển của bạn:

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

Có nhưng 'state.parent' là' undefined' khi bạn sử dụng ký hiệu 'parent.child' (dấu chấm). – gremo

Các vấn đề liên quan