2012-11-17 56 views
20

Tôi có bộ điều khiển hiển thị menu điều hướng trang. Menu có một loạt các mục và mỗi mục có một chú thích và một liên kết. Tôi cũng thiết lập một lá cờ trên từng hạng mục cho biết liệu các trang có liên quan hiện đang hiển thị:cách phát hiện thay đổi vị trí

module.controller('MenuContr', [ 
    /******/ '$scope', '$location', 
    function ($scope, $location) { 
     $scope.items = [ 
      {text: 'page 0', 
      href: '#/page-0', 
      current: $location.path() === '/page-0'}, 
      {text: 'page 1', 
      href: '#/page-1', 
      current: $location.path() === '/page-1'} 
     ]; 

trong mẫu của tôi:

<ul class="menu" ng-controller="MenuContr" ng-cloak> 
    <li ng-repeat="item in items" ng-switch on="item.current"> 
    <span class="current" ng-switch-when="true">{{item.text}}</span> 
    <a ng-switch-default ng-href="{{item.href}}">{{item.text}}</a> 
    </li> 
</ul> 

tôi cần để có thể cập nhật các trình đơn khi thay đổi vị trí, nó được thực hiện như thế nào? Có sự kiện mà tôi có thể đăng ký không?

EDIT: bộ điều khiển này được sử dụng ngoài bộ điều khiển được xác định trong tuyến đường của tôi và mẫu ở trên được đặt phía trên phần tử có chứa chỉ thị ng-view.

Trả lời

21

để trả lời câu hỏi của riêng tôi, trong tôi MenuContr:

 $scope.$on('$routeChangeSuccess', function() { 
      var items = $scope.items; 
      var path = $location.path(); 

      for (var i = 0; i < items.length; i++) { 
       var item = items[i]; 
       var href = item['href']; 
       item['current'] = !!href && href.substring(1) === path; 
      } 
     }); 
+1

Sự khác biệt giữa việc sử dụng $ scope và $ rootScope cho điều này là gì? Trong trường hợp đó là một chỉ thị bắn qua ứng dụng, bạn sẽ sử dụng $ rootScope? – Winnemucca

0

Bạn đến cùng điều khiển về biến đổi tuyến đường? Đó có phải là cách bạn đã định nghĩa trong $ routeProvider trong AppsModule.config không? Bạn có thể chuyển $ routeParams đến cùng một bộ điều khiển, nếu bạn muốn lọc bổ sung.

Bạn đã khởi tạo đối tượng lúc bắt đầu bộ điều khiển của mình. Vì vậy, khi liên kết được thay đổi, cùng một bộ điều khiển sẽ được gọi và bạn không phải làm bất kỳ điều gì khác. Dựa trên tuyến đường được chọn, các mục sẽ được cập nhật.

+0

cảm ơn. Tôi đã chỉnh sửa câu hỏi của mình. Không, đây không phải là một bộ điều khiển được sử dụng trong một tuyến đường. Nó là riêng biệt. – akonsu

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