Answers:
你不能只使用 $stateProvider
。
您需要注入$urlRouterProvider
并创建类似于以下内容的代码:
$urlRouterProvider.otherwise('/otherwise');
该/otherwise
URL必须在国家像往常一样被定义:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
在ksperling解释的地方查看此链接
$stateProvider
。如果您只想显示模板而不重定向,则工作量较少。我喜欢@ juan-hernandez的答案。
otherwise
(在这种情况下'/otherwise'
)传递的值是否必须与状态名称(的第一个参数.state
)或url
option 的值匹配?
您可以$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(...)
是,您不必强制更改位置。
you're not forced to a location change
一下吗?
/this/does/not/exist
,则该URL将以这种方式保留在地址栏中。另一个解决方案将带您/otherwise
您还可以手动将$ state注入else函数中,然后可以导航至非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 !
....
我只想参考已经提供的好答案。将该@uirouter/angularjs
类标记UrlRouterProvider
为不推荐使用的最新版本。他们现在建议UrlService
改为使用。您可以通过以下修改获得相同的结果:
$urlService.rules.otherwise('/defaultState');
其他方法:https : //ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
该接受的答案引用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');
})
$stateProvider.otherwise
,所以对我有帮助)