Vấn đề của tôi là thực sự rất giống với một tìm thấy ở đây:
AngularJs - cancel route change event
Nói tóm lại, tôi đang sử dụng $ routeChangeStart và cố gắng thay đổi hiện tại tuyến đường bằng cách sử dụng $ location. Khi tôi thực hiện, giao diện điều khiển cho tôi biết rằng trang gốc vẫn đang tải và được ghi đè nhanh bởi trang mới.
Giải pháp được cung cấp là sử dụng $ locationChangeStart thay vì $ routeChangeStart, sẽ hoạt động để ngăn việc chuyển hướng thêm. Thật không may, tôi đang sử dụng dữ liệu bổ sung trong $ routeprovider mà tôi cần truy cập trong khi thay đổi tuyến đường (tôi sử dụng nó để theo dõi các hạn chế trang). Dưới đây là một ví dụ ...
$routeProvider.
when('/login', { controller: 'LoginCtrl', templateUrl: '/app/partial/login.html', access: false}).
when('/home', { controller: 'HomeCtrl', templateUrl: '/app/partial/home.html', access: true}).
otherwise({ redirectTo: '/login' });
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if(next.access){
//Do Stuff
}
else{
$location.path("/login");
//This will load the current route first (ie: '/home'), and then
//redirect the user to the correct 'login' route.
}
});
Với $ routeChangeStart, tôi có thể sử dụng "bên cạnh" và "hiện tại" thông số (xem AngularJS - $route) như các đối tượng để lấy 'tiếp cận' giá trị của tôi. Với $ locationChangeStart, hai thông số đó trả về các chuỗi url, không phải các đối tượng. Vì vậy, dường như không có cách nào để lấy lại các giá trị 'truy cập' của tôi.
Có cách nào tôi có thể kết hợp sức mạnh chuyển hướng dừng của $ locationChangeStart với tính linh hoạt đối tượng của $ routeChangeStart để đạt được những gì tôi cần không?
Xin lỗi vì trả lời muộn. Khi một cái gì đó làm việc cho tôi, tôi có xu hướng phấn khởi và tiếp tục. Điều này đã kết thúc là một giải pháp hoàn hảo cho những gì tôi đã làm.Trong hàm tải, tôi có thể thêm những thứ như '$ http' và' $ location' để xử lý thêm các yêu cầu của mình. – ThisLanham
Tôi đã phải làm cho chức năng tải của tôi trông giống như một từ Nick http://stackoverflow.com/a/19482187/1449799 (từ chối không làm việc như được viết ở đây) – Michael
'tải' chức năng nên đọc thêm như thế này: 'var deferred = $ q.defer(); if (access) {deferred.resolve(); } else {deferred.reject(); $ location.url ('/ login'); } return deferred.promise; ' – Clay