2016-05-17 13 views
5

Tôi đang sử dụng tuyến đường ui để điều hướng.
Tôi đã trạng thái cha gọi chính, nó là một abstract nhà nước (url: /main) và con nói sản phẩmngười dùng (url: /main/sản phẩm/main/người dùng).

app.config(["$stateProvider", "$urlRouterProvider", 
    function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise("/main/products"); 
    $stateProvider 
     .state("main", { 
     url:"/main", 
     templateUrl: "main.html", 
     abstract: true, 
     controller: "MainCtrl", 
     }) 
     .state("main.products", { 
     templateUrl: "products.html", 
     controller: "productsCtrl", 
     }) 
     .state("main.users", { 
     templateUrl: "users.html", 
     controller: "usersCtrl", 
     }) 
    } 
]); 

Và đây bộ điều khiển của tôi:

app.controller('MainCtrl', function($scope,$state) { 
    console.log("I'm Main controller") 

    $scope.goToProduct = function() 
    { 
    //$state.go("main.products",{}) 
    $state.go("main.products",{},{reload:true}) 
    } 

    $scope.goToUsers = function() 
    { 
    //$state.go("main.users",{}) 
    $state.go("main.users",{},{reload:true}) 
    } 

}); 

app.controller('usersCtrl', function() { 
    console.log("I'm users controller") 

}); 

app.controller('productsCtrl', function() { 
    console.log("I'm products controller") 
}); 

HTML:

<ul> 
    <li style="cursor:pointer" ng-click="goToProduct()">Click for products</li> 
    <li style="cursor:pointer" ng-click="goToUsers()">Click for users</li> 
</ul> 

<br> 
<div style="font-size:28px" ui-view></div> 

Như bạn thấy, tôi đang sử dụng: $ state.go ("main.products ", {}, {reload: true}) để điều hướng

Khi tôi nhấp vào người dùng/sản phẩm trên menu, hãy MainCtrlreinitialize !!
Đó là vì {reload:true}.

Câu hỏi của tôi:
1) Tại sao trình điều khiển trạng thái "cha" cũng khởi động lại trên mỗi nhấp chuột?
2) Tôi cần một nhã giải pháp cho tránh các MainCtrl để reinitialize!

Đây là ví dụ hoàn chỉnh - plunker hãy xem bảng điều khiển.

+0

Tại sao bạn cảm thấy cần phải buộc tải lại (sử dụng tham số '{reload: true}')? – JAAulde

+0

Tôi có lý do, tôi phải sử dụng nó trong ứng dụng của tôi, tất nhiên nếu không có nó hoạt động hoàn hảo – cheziHoyzer

+0

* thở dài * Bạn đang yêu cầu giải pháp, và bạn sẽ không giải thích đầy đủ ý định của mình. Như vậy, câu trả lời của tôi cho câu hỏi đầu tiên của bạn là "Bởi vì các nhà phát triển giao diện người dùng Router nói rằng đó là cách nó hoạt động. (Http://angular-ui.github.io/ui-router/site/#/api/ui.router. tiểu bang. $ state) "Câu trả lời của tôi cho câu hỏi thứ hai của bạn là" Không cung cấp đủ thông tin, ngay cả sau khi được yêu cầu. Chúc may mắn. " – JAAulde

Trả lời

11
  1. Cập nhật ui-router của bạn lên phiên bản mới hơn (0.2.14 ít nhất)
  2. Thay đổi $state.go cuộc gọi đến một cái gì đó như thế này $state.go("main.users",{},{reload: "main.users"})

Từ ui-router 0.2.14 bạn có thể vượt qua chuỗi như reload giá trị - ui router sẽ làm mới trạng thái phù hợp với chuỗi được thông qua và tất cả các con của nó.

+0

2) Giải pháp của bạn đang hoạt động cho tôi !!! Tuy nhiên tôi không hiểu tại sao nhóm Angular quyết định tải lại cũng là stae trừu tượng trên {reload: true} – cheziHoyzer

0

tùy chọn tải lại: true sẽ tải lại trạng thái hiện tại và trạng thái gốc (về cơ bản từ trạng thái hiện tại của bạn sang trạng thái mức cao nhất). Tuy nhiên, nếu bạn chỉ định tùy chọn tải lại với tên tiểu bang. nó chỉ tải lại trạng thái mà bạn đặt vào và tất cả trạng thái con của nó. Đây là trực tiếp từ tài liệu

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