我在允许用户查看帖子名称中带有问号或多个的帖子时遇到一些问题。当访问mysite.com/posts/user/postname URL时,angular会获取:user和:postName并检索必要的数据,但是如果:postName包含一个或多个问号,它似乎会中断路由,并且页面可以找不到该帖子,因为它与带有问号的实际帖子名称不匹配。但是,如果我输入带有问号%3f的ascii版本的帖子名称,它将起作用并显示正确的数据。
我要么想重写网址以替换?使用%3f或修复我的角度脚本。路由如下所示,控制器的相关部分如下所示。
.when('/posts/:postUser/:postName', {
title: 'View Post',
templateUrl: 'posts/view-post.php',
controller: 'userSingleCtrl',
resolve: {
post: function(services, $route) {
var postName = $route.current.params.postName;
var postUser = $route.current.params.postUser;
return services.getUserSingle(postName, postUser);
return services.getComments(postName, postUser);
}
}
})
控制器:
var postName = ($routeParams.postName) ? $routeParams.postName : 'Doesnt Exist';
var postUser = ($routeParams.postUser) ? $routeParams.postUser : 'Doesnt Exist';
var original = post.data;
original._name = postName;
original._user = postUser;
$scope.post = angular.copy(original);
$scope.post._name = postName;
$scope.post._user = postUser;
以防万一当前的htaccess规则造成了这种情况,而实际上我的htaccess也并非如此。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /#/$1 [L,QSA]
<IfModule mod_expires.c>
ExpiresActive off
ExpiresByType text/html "access 1 month"
ExpiresByType text/css "access 1 month"
ExpiresByType application/javascript "access 1 month"
ExpiresByType text/javascript "access 1 month"
ExpiresByType text/plain "access 1 month"
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType image/gif "access 1 month"
ExpiresByType image/png "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresDefault "access 2 days"
</IfModule>
<IfModule mod_deflate.c>
<FilesMatch "\.(html|php|txt|xml|js|css)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
最佳答案
以下链接显示了使用角度滤镜进行uri编码的示例。您可能会在生成帖子链接以编码?时做同样的事情。 (和其他字符)转换为有效的uri。
How to generate url encoded anchor links with AngularJS?
关于javascript - 里面的问号或angularjs的网址有问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33620870/