Ok, đã giải quyết :) Bộ định tuyến UI góc có phương thức mới này, $ urlRouterProvider.deferIntercept ()
https://github.com/angular-ui/ui-router/issues/64
về cơ bản nó đi xuống này:
angular.module('myApp', [ui.router])
.config(['$urlRouterProvider', function ($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}])
// then define the interception
.run(['$rootScope', '$urlRouter', '$location', '$state', function ($rootScope, $urlRouter, $location, $state) {
$rootScope.$on('$locationChangeSuccess', function(e, newUrl, oldUrl) {
// Prevent $urlRouter's default handler from firing
e.preventDefault();
/**
* provide conditions on when to
* sync change in $location.path() with state reload.
* I use $location and $state as examples, but
* You can do any logic
* before syncing OR stop syncing all together.
*/
if ($state.current.name !== 'main.exampleState' || newUrl === 'http://some.url' || oldUrl !=='https://another.url') {
// your stuff
$urlRouter.sync();
} else {
// don't sync
}
});
// Configures $urlRouter's listener *after* your custom listener
$urlRouter.listen();
}]);
Tôi nghĩ rằng phương pháp này hiện đang chỉ bao gồm trong tổng thể phiên bản của router ui góc, là với các thông số tùy chọn (trong đó là tốt đẹp quá, btw). Nó cần được nhân bản và xây dựng từ nguồn với
grunt build
Các tài liệu cũng có thể truy cập được từ nguồn
grunt ngdocs
(chúng được tích hợp vào thư mục / site) // thêm thông tin trong README.MD
Dường như có một cách khác để làm điều này, bằng các tham số động (mà tôi chưa sử dụng). Nhiều tín dụng cho natablesele.
Là một sidenote, đây là các tham số tùy chọn trong $ stateProvider của Angular UI Router, mà tôi đã sử dụng kết hợp với ở trên:
angular.module('myApp').config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('main.doorsList', {
url: 'doors',
controller: DoorsListCtrl,
resolve: DoorsListCtrl.resolve,
templateUrl: '/modules/doors/doors-list.html'
})
.state('main.doorsSingle', {
url: 'doors/:doorsSingle/:doorsDetail',
params: {
// as of today, it was unclear how to define a required parameter (more below)
doorsSingle: {value: null},
doorsDetail: {value: null}
},
controller: DoorsSingleCtrl,
resolve: DoorsSingleCtrl.resolve,
templateUrl: '/modules/doors/doors-single.html'
});
}]);
những gì nó làm là cho phép giải quyết một trạng thái, ngay cả khi một trong các thông số bị thiếu. SEO là một mục đích, dễ đọc khác.
Trong ví dụ trên, tôi muốn cửa ra vào là một tham số bắt buộc. Không rõ làm thế nào để xác định những người. Nó hoạt động tốt với nhiều tham số tùy chọn, vì vậy không thực sự là một vấn đề. Cuộc thảo luận ở đây https://github.com/angular-ui/ui-router/pull/1032#issuecomment-49196090