OK, rozwiązane :) Angular UI Router ma tę nową metodę, $ urlRouterProvider.deferIntercept ()
https://github.com/angular-ui/ui-router/issues/64
w zasadzie sprowadza się do tego:
angular.module('myApp', [ui.router])
.config(['$urlRouterProvider', function ($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}])
.run(['$rootScope', '$urlRouter', '$location', '$state', function ($rootScope, $urlRouter, $location, $state) {
$rootScope.$on('$locationChangeSuccess', function(e, newUrl, oldUrl) {
e.preventDefault();
if ($state.current.name !== 'main.exampleState' || newUrl === 'http://some.url' || oldUrl !=='https://another.url') {
$urlRouter.sync();
} else {
}
});
$urlRouter.listen();
}]);
Myślę, że ta metoda jest obecnie dostępna tylko w wersji głównej routera kątowego ui, tej z opcjonalnymi parametrami (które też są fajne, przy okazji). Musi zostać sklonowany i zbudowany ze źródła z
grunt build
Dokumenty są również dostępne ze źródła za pośrednictwem
grunt ngdocs
(są wbudowane w katalog / site) // więcej informacji w README.MD
Wydaje się, że jest na to inny sposób, poprzez parametry dynamiczne (których nie używałem). Wiele kredytów dla nateabele.
Na marginesie, oto opcjonalne parametry w $ stateProvider Angular UI Routera, których użyłem w połączeniu z powyższym:
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: {
doorsSingle: {value: null},
doorsDetail: {value: null}
},
controller: DoorsSingleCtrl,
resolve: DoorsSingleCtrl.resolve,
templateUrl: '/modules/doors/doors-single.html'
});
}]);
co to robi, to pozwala rozwiązać stan, nawet jeśli brakuje jednego z parametrów. SEO to jeden cel, czytelność inny.
W powyższym przykładzie chciałem, aby parametr doorSingle był wymaganym parametrem. Nie jest jasne, jak je zdefiniować. Działa jednak dobrze z wieloma opcjonalnymi parametrami, więc nie stanowi to problemu. Dyskusja jest tutaj https://github.com/angular-ui/ui-router/pull/1032#issuecomment-49196090