Hoạt động bình thường của hệ thống tuyến đường là dành cho dịch vụ $route
để xem sự kiện $locationChangeSuccess
và sau đó bắt đầu tải tuyến đường. Khi nó được thực hiện tải mẫu, thực hiện các bước giải quyết và instantiating bộ điều khiển nó sau đó lần lượt phát sóng một sự kiện $routeChangeSuccess
. Điều đó $routeChangeSuccess
được theo dõi bởi chỉ thị ng-view
, và đó là cách nó biết để trao đổi ra các mẫu và phạm vi khi tuyến đường mới đã sẵn sàng.
Với tất cả những điều trên đã nói, nó có thể làm việc để có mã ứng dụng bắt chước hành vi của các dịch vụ $route
bằng cách cập nhật các tuyến đường hiện tại và phát ra sự kiện thay đổi lộ trình để có được cái nhìn để cập nhật:
var errorRoute = $route.routes[null]; // assuming the "otherwise" route is the 404
// a route instance is an object that inherits from the route and adds
// new properties representing the routeParams and locals.
var errorRouteInstance = angular.inherit(
errorRoute,
{
params: {},
pathParams: {},
}
);
// The $route service depends on this being set so it can recover the route
// for a given route instance.
errorRouteInstance.$$route = errorRoute;
var last = $route.current;
$route.current = errorRouteInstance;
// the ng-view code doesn't actually care about the parameters here,
// since it goes straight to $route.current, but we should include
// them anyway since other code might be listening for this event
// and depending on these params to behave as documented.
$rootScope.broadcast('$routeChangeSuccess', errorRoute, last);
Ở trên giả định rằng tuyến đường "khác" của bạn không có bất kỳ bước "giải quyết" nào. Nó cũng giả định rằng nó không mong đợi bất kỳ $routeParams
, đó là tất nhiên đúng cho các tuyến đường "nếu không" nhưng có thể không đúng nếu bạn sử dụng một tuyến đường khác nhau.
Không rõ nội dung nào ở trên tùy thuộc vào chi tiết triển khai so với giao diện. Sự kiện $routeChangeSuccess
chắc chắn là tài liệu, nhưng thuộc tính $$route
của trường hợp tuyến đường có vẻ là chi tiết triển khai của hệ thống tuyến đường với tên ký hiệu đô la đôi của nó. Chi tiết rằng tuyến đường "khác" được lưu giữ trong bảng định tuyến với khóa null
cũng có thể là chi tiết triển khai. Vì vậy, với tất cả điều này nói, hành vi này có thể không còn hoạt động trong các phiên bản tương lai của AngularJS.
Để biết thêm thông tin, bạn có thể tham khảo the ng-view
code that handles this event, điều cuối cùng là mã trên đang cố gắng vui lòng, cùng với the event emitting code mà tôi đã sử dụng làm cơ sở cho ví dụ trên. Như bạn có thể phỏng đoán từ các liên kết này, thông tin trong bài đăng này được bắt nguồn từ nhánh chủ mới nhất của AngularJS, tại thời điểm viết được gắn nhãn là ảnh chụp nhanh 1.2.0.
Nguồn
2013-10-04 01:22:14
Bạn đang nói bằng cách sử dụng phương pháp thay thế, bạn có thể cập nhật URL mà không thay đổi trạng thái khác trên trang? Ý tôi là về hiệu ứng thuần túy của việc thay đổi URL? Bởi vì đây là những gì cho phép khả năng các trang là lớp phủ (với các Url đúng) tương tự như sở thích. – CMCDragonkai
Tôi đã viết rằng một thời gian trước nhưng tôi nghĩ rằng sự thay đổi url vẫn kích hoạt sự kiện góc để định tuyến lại nhưng điều này sẽ giữ cho nó hiển thị trong lịch sử trình duyệt vì vậy ít nhất nút quay lại của bạn vẫn hoạt động. – thrashr888
Đẹp. Nó cũng hoạt động với '.search()' – vtortola