Используя angular -ui-router, как я могу использовать метод иначе на $stateProvider или как я могу использовать его вообще?
В противном случае на StateProvider
Ответ 1
Вы не можете использовать только $stateProvider
.
Вам нужно ввести $urlRouterProvider
и создать код, похожий на:
$urlRouterProvider.otherwise('/otherwise');
URL-адрес /otherwise
должен быть определен как обычно:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
Смотрите эту ссылку, где ksperling объясняет
Ответ 2
Вы можете использовать $stateProvider
с помощью синтаксиса catch all ("*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(...)
, заключается в том, что вы не вынуждены менять местоположение.
Ответ 3
Вы также можете вручную ввести $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+'"'
});
});
Ответ 4
Хорошо, глупый момент, когда вы понимаете, что уже заданный вами вопрос уже отвечает в первых строках образца кода! Просто взгляните на образец кода.
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 !
....
Ответ 5
принятый ответ angular-route
спрашивает о ui-router
. В принятом ответе используется "monolithic" $routeProvider
, для которого требуется модуль ngRoute
(тогда как ui-router
нужен модуль ui.router
)
самый высокий рейтинг использует $stateProvider
вместо этого и говорит что-то вроде .state("otherwise", { url : '/otherwise'... })
,
но я не могу найти упоминания "в противном случае" в документации, которую он связывает. Тем не менее, я вижу, что $stateProvider
упоминается в этом ответе, где говорится:
Вы не можете использовать только
$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');
})