2013-01-23 11 views
8

Phiên bản ngắn của câu hỏi là: Làm cách nào để thay đổi URL mà không cần kích hoạt thay đổi tuyến đường hoặc không cần chạy tất cả các bộ điều khiển trên trang hiện đang hiển thị?Thay đổi đường dẫn vị trí AngularJs mà không cần tất cả bộ điều khiển đặt lại

chi tiết:

Tôi có một mẫu mà sẽ được hiển thị bên trong <ng-view> có khu vực chi phối bởi 3 bộ điều khiển. Trên đầu trang tôi có một bản đồ tương tác. Khi bạn nhấp vào các khu vực, nó sẽ phát một nhấp chuột và thành phần khác chọn lên trên đó và hiển thị dữ liệu về vùng này. Thiết lập thực sự đơn giản.

Điều tôi muốn làm là cho phép người dùng của tôi liên kết sâu với nội dung. Vì vậy, mỗi khi ai đó nhấp vào một liên kết tôi muốn thay đổi URL có thể được sao chép và dán vào một trình duyệt khác. Một số người dùng khác chỉ có thể nhấp vào liên kết và xem trạng thái tương tự mà người đầu tiên nhìn thấy.

Hiện nay tôi thay đổi vị trí với mã tương tự như thế này:

$scope.$on('mapRegionClick', function($scope, regionCode) { 
    var url = generateURL(regionCode); 

    $scope.currentScope.$apply(function(){ 
     $location.path(url); 
    });}); 

URL sau đó được vớt lên trong định tuyến của tôi và bản đồ cộng với dữ liệu hiển thị một cách chính xác. Nhược điểm của việc này là mỗi lần tôi nhấp vào bản đồ và URL thay đổi toàn bộ mẫu/chế độ xem được tạo lại. Bởi vì tạo bản đồ nặng nề nên tôi chỉ muốn kích hoạt một thay đổi đối với bộ điều khiển trình bày dữ liệu.

Có thể không? Làm sao?

Tôi có thể làm một số thông tin liên lạc giữa các bộ điều khiển và đạt được mục tiêu của mình nhưng sau đó tôi sẽ không thể liên kết sâu.

PS: Tôi không muốn sử dụng $location.search()reloadOnSearch=false. liên kết của tôi phải đẹp hơn :)

+0

bạn đã thử đặt bản đồ bên ngoài 'ng-view' và liên kết bộ điều khiển của nó với bộ điều khiển được gắn với tuyến đường bằng dịch vụ dùng chung chưa? – akonsu

+0

điều là tôi cần bản đồ bên trong 'ng-view' cho mẫu cụ thể này bởi vì các phần khác của trang web sử dụng một số mẫu khác mà bản đồ không phải là một phần của chúng. – Ralphz

+0

Thật đáng tiếc khi góc cạnh không cung cấp cách làm sạch. Tôi thích góc cạnh, nhưng đây là lý do tôi ưa thích Ember trên một trong những dự án của tôi. –

Trả lời

9

Có vẻ như bạn không muốn sử dụng dịch vụ $route.

Dịch vụ $route được thiết kế để tải lại bộ điều khiển để không có sự khác biệt giữa điều hướng đến URL và làm mới URL. Chúng tôi thực hiện việc này bằng cách tải lại toàn bộ mọi thay đổi URL. Đây là cố ý.

Có vẻ như trường hợp sử dụng của bạn, không được sử dụng $route, chỉ $locationng-include.

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