Javascript 使用AngularJS ui路由器深度链接到URL的问题
我刚刚遇到了一个问题,这似乎是由于我更改了应用程序的文件夹结构而引起的(但我认为这是一个“红鲱鱼”)。我有一个小AngularJS应用程序,为了整理东西,我将一部分功能移到了它自己的文件夹中。我更新了我的Javascript 使用AngularJS ui路由器深度链接到URL的问题,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我刚刚遇到了一个问题,这似乎是由于我更改了应用程序的文件夹结构而引起的(但我认为这是一个“红鲱鱼”)。我有一个小AngularJS应用程序,为了整理东西,我将一部分功能移到了它自己的文件夹中。我更新了我的$stateProvider部分中的所有标记引用、所有视图模板URL值。。。我没有收到404错误,所有控制器和视图都已加载,但我注意到,在我的应用程序中,我无法直接链接到特定的URL(我以前可以)。我希望直接/深度链接到的URL是 当我在浏览器中输入这个时,我会得到一个gethttp://mya
$stateProvider
部分中的所有
标记引用、所有视图模板URL
值。。。我没有收到404错误,所有控制器和视图都已加载,但我注意到,在我的应用程序中,我无法直接链接到特定的URL(我以前可以)。我希望直接/深度链接到的URL是
当我在浏览器中输入这个时,我会得到一个gethttp://myapp.com/an/membership/ 403(禁止)
错误。路由有4个子状态/URL。我可以深入链接到所有这些。更糟糕的是,如果我的应用程序中有链接(使用ui-sref
),我可以毫无问题地链接到我的状态/url。。。这是我的州/路线代码。。。我添加了一些注释来解释我的问题
/* This is the parent state of my membership state !! */
.state('sfm.in', {
abstract: true,
url: '/an/',
templateUrl: '/an/views/member-home/member-home-wrapper.html'
})
/* here the url is http://myapp.com/an/membership - I can link to it using ui-sref but can't deep link, I get a "403 forbidden", everything loads as expected (not sure if I need the abstract). */
.state('sfm.in.membership', {
url: 'membership',
templateUrl: '/an/membership/views/membership.html',
controller: 'MembershipCtrl',
abstract: true
})
/* this child state is a default and has the same URL as the parent - http://myapp.com/an/membership*/
.state('sfm.in.membership.advantages', {
url: '',
templateUrl: '/an/membership/views/membership-advantages.html'
})
/* No problem with deeplinking - http://myapp.com/an/membership/payment */
.state('sfm.in.membership.payment', {
url: '/payment',
controller: 'MembershipPaymentCtrl',
templateUrl: '/an/membership/views/membership-payment.html'
})
/* No problem with deeplinking http://myapp.com/an/membership/account */
.state('sfm.in.membership.account', {
url: '/account',
controller: 'MembershipAccountCtrl',
templateUrl: '/an/membership/views/membership-account.html'
})
/* No problem with deeplinking http://myapp.com/an/membership/data */
.state('sfm.in.membership.data', {
url: 'data',
controller: 'MembershipDataCtrl',
templateUrl: '/an/membership/views/membership-data.html'
});
我已经在我的应用程序中正确设置了$locationProvider.html5Mode
(我可以在浏览器中键入其他url的url)
有人看到这里有问题吗*更新*我在路由示例中添加了父状态,请查看我在第一个答案中的评论 您在第一个状态中忘记了“/”:
.state('sfm.in.membership', {
url: '/membership',
templateUrl: '/an/membership/views/membership.html',
controller: 'MembershipCtrl',
abstract: true
})
这似乎很奇怪,但我认为问题在于浏览器在我输入url时预先设置了url。我终于改变了密码,所以。。。但是这里没有真正的变化。。。我认为浏览器是问题所在。与此同时,我更改了URL,但是清除历史记录/缓存也可以解决这个问题
.state('sfm.in.membership', {
abstract: true,
url: 'member-ship',
templateUrl: '/an/membership/views/membership.html'
})
.state('sfm.in.membership.advantages', {
url: '',
templateUrl: '/an/membership/views/membership-advantages.html'
})
.state('sfm.in.membership.payment', {
url: '/payment',
controller: 'MembershipPaymentCtrl',
templateUrl: '/an/membership/views/membership-payment.html'
})
.state('sfm.in.membership.account', {
url: '/account',
controller: 'MembershipAccountCtrl',
templateUrl: '/an/membership/views/membership-account.html'
})
.state('sfm.in.membership.data', {
url: '/data',
controller: 'MembershipDataCtrl',
templateUrl: '/an/membership/views/membership-data.html'
})
然而,我最初认为,当我添加正斜杠时,url“”不起作用,但“”起作用了?您在哪里声明了:/an的状态?我刚刚更新了示例。。。添加了“an”路线!必须删除最后一个“/”。尝试url:“/an”使用此选项,它必须工作:.state('sfm.in',{abstract:true,url:'/an',templateUrl:'/an/views/member home/member home wrapper.html'})。state('sfm.in.membership',{url:'/membership',templateUrl:'/an/membership/views/membership.html',controller:'MembershipCtrl',abstract:true})总是同样的错误吗?403?