В противном случае на StateProvider
используя angular-ui-router, как я могу использовать в противном случае метод on $stateProvider или как я могу использовать его на всех ?
6 ответов:
вы не можете использовать
$stateProvider
.вам нужно впрыснуть
$urlRouterProvider
и создать код, подобный:$urlRouterProvider.otherwise('/otherwise');
The
/otherwise
url должен быть определен в состоянии как обычно:$stateProvider .state("otherwise", { url : '/otherwise'...})
смотрите эту ссылку где ksperling объясняет
вы можете с
$stateProvider
С помощью поймать весь синтаксис ("*path"
). Вам просто нужно добавить конфигурацию состояния в нижней части списка, как показано ниже:$stateProvider.state("otherwise", { url: "*path", templateUrl: "views/error-not-found.html" });
все параметры описаны в https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters.
хорошая вещь этого варианта, в отличие от
$urlRouterProvider.otherwise(...)
, это то, что вы не вынуждены менять местоположение.
вы также можете вручную ввести $state в функцию в противном случае, которую затем можно перейти в состояние без url. Это имеет то преимущество, что браузер не изменяет адресную строку, что полезно для обработки возврата к предыдущей странице.
$urlRouterProvider.otherwise(function ($injector, $location) { var $state = $injector.get('$state'); $state.go('defaultLayout.error', { title: "Page not found", message: 'Could not find a state associated with url "'+$location.$$url+'"' }); });
ОК, глупый момент, когда вы понимаете, что вопрос, который вы задали, уже ответил в первых строках примера кода! Просто взгляните на пример кода.
angular.module('sample', ['ui.compat']) .config( [ '$stateProvider', '$routeProvider', '$urlRouterProvider', function ($stateProvider, $routeProvider, $urlRouterProvider) { $urlRouterProvider .when('/c?id', '/contacts/:id') .otherwise('/'); // <-- This is what I was looking for ! ....
The принято отвечать ссылки
angular-route
спрашивает оui-router
. Принятый ответ использует "монолитный"$routeProvider
, который требуетngRoute
модуль (в то время какui-router
нужныui.router
модуль)The самый высокий рейтинг ответа использует
$stateProvider
вместо этого и говорит что-то вроде.state("otherwise", { url : '/otherwise'... })
, но я не могу найти никакого упоминания "иначе" в документация ссылки. Однако, я вижу, что это в ответ где он говорит:вы не можете использовать
$stateProvider
. Вам нужно ввести$urlRouterProvider
вот где мой ответ может помочь вам. Для меня было достаточно использовать
$urlRouterProvider
вот так:my_module .config([ , '$urlRouterProvider' , function( , $urlRouterProvider){ //When the url is empty; i.e. what I consider to be "the default" //Then send the user to whatever state is served at the URL '/starting' //(It could say '/default' or any other path you want) $urlRouterProvider .when('', '/starting'); //... }]);
мое предложение согласуется с
ui-router
документация, (это конкретная редакция), где он включает в себя аналогичное использование.when(...)
Метод (первый вызов функция):app.config(function($urlRouterProvider){ // when there is an empty route, redirect to /index $urlRouterProvider.when('', '/index'); // You can also use regex for the match parameter $urlRouterProvider.when(/aspx/i, '/index'); })
Я просто хочу, чтобы перезвонить на большие ответы, которые уже предоставлены. Последняя версия
@uirouter/angularjs
отмечен классомUrlRouterProvider
как deprecated. Теперь они рекомендуют использовать . Вы можете достичь того же результата со следующим изменением:$urlService.rules.otherwise('/defaultState');
дополнительные методы:https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html