Chuyển hướng bằng AngularJS


86

Tôi đang cố gắng chuyển hướng đến một tuyến đường khác bằng cách sử dụng:

$location.path("/route");

Nhưng vì một số lý do nó không hoạt động. Tôi đã tạo một widget tự động hoàn thành bằng jQuery-UI và tôi đang gọi một hàm từ phạm vi sau khi người dùng chọn một tùy chọn. Tôi đã gỡ lỗi nó và nó đi vào chức năng nhưng nó không bao giờ được chuyển hướng đến tuyến đường khác. Nó chỉ thay đổi lộ trình khi tôi nhấn một phím.

Tôi nghĩ nó hơi kỳ lạ nhưng tôi chưa tìm ra cách giải quyết vấn đề này. Tôi đã sử dụng

window.location = "#/route";

và nó hoạt động nhưng tôi muốn sử dụng path()chức năng.

Có ai có bất kỳ ý tưởng tại sao điều này đang xảy ra?

Câu trả lời:


109

Với một ví dụ về mã không hoạt động, sẽ rất dễ dàng để trả lời câu hỏi này, nhưng với thông tin này, tôi có thể nghĩ rằng tốt nhất là bạn đang gọi $ location.path bên ngoài thông báo AngularJS.

Hãy thử làm điều này trên chỉ thị scope.$apply(function() { $location.path("/route"); });


Cảm ơn bạn rất nhiều và tôi xin lỗi vì đã không đăng ví dụ không hoạt động. Nhưng đây là những gì mã của tôi cần.
Tomarto

23
Bất kỳ ý tưởng nào về cách làm cho điều này hoạt động trong phương thức .success bên trong một yêu cầu $ http? @Tomarto
Nicholas Kreidberg.

2
trên firefox (30 ~) giao diện điều khiển bắn một lỗi mà $ áp dụng chu kỳ là bận rộn
Svarog

1
Công việc này dự định làm như thế nào nhỉ? Tôi gặp phải lỗi sau: Lỗi: [$ rootScope: inprog] $ apply are in process error.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply at angle.js: 78 ..... do đó, nó không phải là làm việc như windows.location = '' ..
Vaibhav

1
@NicholasKreidberg có cùng câu hỏi và chỉ thêm $ scope. $ Apply (); chỉ sau $ location.path ("/ route"); đã làm cho tôi.
Ernesto Allely

82

Đừng quên tiêm $locationvào bộ điều khiển.


2
Bắt đẹp - đó là vấn đề đối với tôi.
Jason Swett

Tuyệt vời, cảm ơn bạn đã đăng bài này, những gì dường như quá rõ ràng đã không.
Chuck Conway

20

Giả sử bạn không sử dụng định tuyến html5, hãy thử $location.path("route"). Điều này sẽ chuyển hướng trình duyệt của bạn đến #/routeđó có thể là những gì bạn muốn.


15

Nếu bạn cần chuyển hướng sử dụng ứng dụng góc cạnh của mình $window.location. Đó là trường hợp của tôi; hy vọng ai đó sẽ thấy nó hữu ích.


2

Kiểm tra phương pháp định tuyến của bạn:

nếu trạng thái định tuyến của bạn như thế này

 .state('app.register', {
    url: '/register',
    views: {
      'menuContent': {
        templateUrl: 'templates/register.html',
      }
    }
  }) 

thì bạn nên sử dụng

$location.path("/app/register");

0

Thật khó để nói nếu không biết mã của bạn. Dự đoán tốt nhất của tôi là onchangesự kiện không kích hoạt khi bạn thay đổi giá trị hộp văn bản của mình từ mã JavaScript.

Có hai cách để làm việc này; thứ nhất là onchangetự mình gọi , thứ hai là đợi hộp văn bản mất tiêu điểm.

Kiểm tra câu hỏi này ; cùng một vấn đề, khuôn khổ khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.