AngularJs UI路由器-具有多个URL的一种状态
我请求添加另一个URL参数,该参数指向我已经设置的状态。为了提高效率,我正在尝试查看是否可以添加多个URL以指向同一状态,或者在这种新情况下是否应该使用$UrlRouterProvider.when()方法重新定向到该状态 这是已经存在的AngularJs UI路由器-具有多个URL的一种状态,angularjs,routing,Angularjs,Routing,我请求添加另一个URL参数,该参数指向我已经设置的状态。为了提高效率,我正在尝试查看是否可以添加多个URL以指向同一状态,或者在这种新情况下是否应该使用$UrlRouterProvider.when()方法重新定向到该状态 这是已经存在的 .state('site.link1', { url: '/link1', templateUrl: '/views/link1.html', controller: 'link1Ctrl' }) 请求是添加指向link1页面
.state('site.link1',
{
url: '/link1',
templateUrl: '/views/link1.html',
controller: 'link1Ctrl'
})
请求是添加指向link1页面的www.site.com/newlink。有没有这样的东西,
.state('site.link1',
{
url: '/link1, /newlink',
...
您可以使用参数:
所以当你使用相同的状态时
$state.go('site.link', {link: 'link1'})
$state.go('site.link', {link: 'link2'})
你可以使用这个函数
.state('site.link1',
{
url: '/link1',
templateUrl: '/views/link1.html',
controller: 'link1Ctrl'
})
然后在根配置上
angular.module('myApp', [...])
.config(function ($urlRouterProvider) {
$urlRouterProvider.when(/newlink/, ['$state','$match', function ($state, $match) {
$state.go('site.link1');
}]);
});
我遇到了几乎相同的问题,只是有另一个限制-我不想使用重定向,因为我希望浏览器中的url保持不变,但显示相同的状态。
这是因为我希望chrome保存的密码能够为已经保存了上一个url的用户工作 在我的例子中,我想要这两个URL:
/gilly
和/new/gilly
都指向相同的状态 我通过为
/gilly
定义一个状态来解决这个问题,对于第二个url,我定义了一个名为/new
的抽象状态
这应该像这样设置:
$stateProvider.state('new', {
abstract: true,
url: '/new'
template: '',
controller: function() { }
}).state('gilly', {
url: '/gilly',
template: 'gilly.html',
controller: 'GillyController'
}).state('new.gilly', {
url: '/gilly', // don't add the '/new' prefix here!
template: 'gilly.html',
controller: 'GillyController'
});
尝试在url中使用正则表达式和参数。它不是最优的,但有效
.state('site.link1',
{
url: '/{path:link1|newlink}',
templateUrl: '/views/link1.html',
controller: 'link1Ctrl'
})
要生成带有ui sref
的链接,请将状态名称相同的参数作为函数传递
<a ui-sref="site.link1({path:'link1'})" >site link 1</a>
<a ui-sref="site.link1({path:'newlink'})">site new link</a>
站点链接1
网站新链接
我发现这种方法非常简单明了:创建两个相等的状态,只需更改url
属性
//Both root and login are the same, but with different url's.
var rootConfig = {
url: '/',
templateUrl:'html/authentication/login.html',
controller: 'authCtrl',
data: {
requireLogin: false
}
}
var loginConfig = Object.create(rootConfig)
loginConfig.url = '/login'
$stateProvider
.state('root', rootConfig)
.state('login', loginConfig)
当前您必须使用。当或多次定义状态时,使用不同的url。。。这里有一些方法:如果唯一的更改是stateparms,那么您可以使用相同的路由通过空参数,唯一不那么优雅的是您的url中会有一个“/”。如果规范定义了一个完全不同的url,则需要一个新的状态如果同一状态上有两个不同的参数值重定向到这些不同的ursl,则可以使用templateurl作为函数,其中第一个参数为routeparam,并相应地返回url。但现在还不清楚你到底想做什么。我很好奇,你在你提供的链接中看到了这样的例子吗?链接显示了文档,并使用了contacts.details。我只是用这个例子来说明如何使用“go”函数来改变状态。这个例子不是针对两个状态吗?是否有一个实例可以覆盖州的
url
选项?因此,最终只有一个状态。谢谢
//Both root and login are the same, but with different url's.
var rootConfig = {
url: '/',
templateUrl:'html/authentication/login.html',
controller: 'authCtrl',
data: {
requireLogin: false
}
}
var loginConfig = Object.create(rootConfig)
loginConfig.url = '/login'
$stateProvider
.state('root', rootConfig)
.state('login', loginConfig)