Javascript 为什么AngularJS要从搜索栏中删除我的部分URL
我正在尝试为CRUD站点设置状态提供程序 当我转到Javascript 为什么AngularJS要从搜索栏中删除我的部分URL,javascript,html,angularjs,angular-ui-router,Javascript,Html,Angularjs,Angular Ui Router,我正在尝试为CRUD站点设置状态提供程序 当我转到www.mysite.com/posts/mypost时,URL会被截断为www.mysite.com/mypost,并且不会触发控制器。当我使用AngularJS的routeProvider时,这个错误不会持续,但是默认的提供程序对于我正在尝试的操作来说不够健壮。我假设在stateProvider决定下一步做什么之前,有什么东西截断了URL,但我不知道是什么原因造成的。如何阻止stateProvider(或任何罪魁祸首)截断 以下是代码的一部分
www.mysite.com/posts/mypost
时,URL会被截断为www.mysite.com/mypost
,并且不会触发控制器。当我使用AngularJS的routeProvider时,这个错误不会持续,但是默认的提供程序对于我正在尝试的操作来说不够健壮。我假设在stateProvider决定下一步做什么之前,有什么东西截断了URL,但我不知道是什么原因造成的。如何阻止stateProvider(或任何罪魁祸首)截断
以下是代码的一部分
$stateProvider.state('posts',{
url: '/posts',
templateUrl: localized.partials + '/post-list.html',
controller: 'loopController'
}).state('post',{
url: '/posts/:post/',
templateUrl: localized.partials + "/post-single.html",
controller: 'singlePostController'
}).state('pages',{
url: '/pages',
templateUrl: localized.partials + '/page-list.html',
controller: 'pagesController'
}).state('page',{
url: '/pages/:page',
templateUrl: localized.partials + '/page-single.html',
controller: 'singlePageController'
});
app.controller('singlePostController',
['$scope', '$stateParams', 'Post', function ($scope, $stateParams, Post)
{
$http.get(resturl +'/posts/'+$stateParams.post).
success(function(s){
console.log(s);}).
error(function(e){
console.log(e)});
}
]);
你的
post
状态后面的斜杠是导致你悲伤的原因。要直接激活该状态,您需要遵循您定义的模式,包括尾部斜杠。这看起来像
www.mysite.com/posts/mypost/
你有一些选择来解决这个问题。您可以从状态定义中删除尾随斜杠,例如
}).state('post',{
url: '/posts/:post'
...
或者按照ui路由器常见问题页面上的建议实现以下逻辑来处理此问题
这实际上驱动了一些额外的配置,如下所示
$urlMatcherFactoryProvider.strictMode(false);
$urlRouterProvider.rule(function ($injector, $location) {
var path = $location.url();
// check to see if the path already has a slash where it should be
if (path[path.length - 1] === '/' || path.indexOf('/?') > -1) {
return;
}
if (path.indexOf('?') > -1) {
return path.replace('?', '/?');
}
return path + '/';
});
注意:app/scripts/app.js中的所有路由都必须用尾部重新定义 /。这意味着像/things/:id这样的路由将变成/things/:id/as 嗯
我想您没有显示所有相关代码。也许你应该注意后面的斜杠。@hgoebl我有另一个提供程序来提供同样问题的页面。我会附上那个。除此之外,所有内容都包装在app.config中。我删掉了文章的尾随斜杠,但它仍然有相同的行为。同样的错误继续发生。确定这是一个服务器设置+不过,我认为这是有效的