2014-11-14 18 views
5

Tôi có một ứng dụng sẽ phân phát các trạng thái khác nhau dựa trên một số dữ liệu API. Nếu cấu hình trạng thái của ứng dụng của tôi trông giống như sau:Làm thế nào để tự động thay đổi trạng thái mặc định ui-router sử dụng?

$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' 
}); 

Sau đó, tôi muốn 1 trong 2 trạng thái được mặc định dựa trên giá trị trong đối tượng OrderResolve. Về cơ bản, tôi sử dụng resolve để nhận dữ liệu API cho tôi biết người dùng này có kích hoạt dịch vụ SharePoint hay không. Nếu số OrderResolve.hasSharepoint == true thì tôi muốn đặt mặc định thành trạng thái order.sharepoint.index, nhưng nếu OrderResolve.hasSharepoint == false thì tôi muốn đặt mặc định thành trạng thái order.sharepoint.setup. Trạng thái đầu tiên hiển thị dữ liệu SharePoint và trạng thái thứ hai chỉ là một biểu mẫu để "thiết lập" các dịch vụ Sharepoint.

Có cách nào đơn giản để đạt được loại chức năng này không?

+0

Theo mặc định, ui-router dường như chọn tiểu bang đầu tiên trong $ stateProvider mà trong trường hợp này là 'order.sharepoint.index' .. do đó tôi chỉ có thể cho phép nó tải' index' mỗi lần và sau đó chỉ cần chuyển trực tiếp đến trạng thái 'setup' từ bộ điều khiển' index' nếu cần .. điều này chỉ cảm thấy bị hack –

+0

bạn quản lý để làm cho nó hoạt động? Tôi có cùng một vấn đề ở đây, sẽ được tốt đẹp để đăng câu trả lời, nếu bạn tìm thấy nó – gfpacheco

Trả lời

0

Bạn cần trạng thái trung bình và bạn đã có nó. Nếu bạn xóa abstract: true, khỏi order.sharepoint và luôn goto trạng thái đó bất kể giá trị giải quyết OrderResolve của bạn.

Sau đó, trong SharePointController bạn có quyền truy cập vào các OrderResolve và bạn có thể quyết định trạng thái đích:

// inside SharePointController 

if (OrderResolve.hasSharepoint == true){ 
    $state.go('order.sharepoint.index'); 
else { 
    $state.go('order.sharepoint.setup'); 
} 
Các vấn đề liên quan