我的资源定义如下:
app.factory("DatumItem", function($resource) {
return $resource('/data/:id', {id: '@id'});
});
在我看来,我有:
<div ng-click="go('/datum/' + d.to_param)">Test</div>
其中go()在我的控制器中定义为:
$scope.go = function (params) {
$location.path(params);
};
对于有问题的项目,d.param等于
TkZUOWZwcnc9Uldo%0ASzRvd2FiWk
但是当我用正确的ID调用DatumItem.get()时,它正在将id更改为
TkZUOWZwcnc9Uldo%250ASzRvd2FiWk
在这种情况下,有没有办法阻止%被编码为%25?
我尝试过使用encodeURI,encodeURIComponent的组合无济于事。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:9)
由于URL已经过URI编码,因此您需要先将其解码,然后再将其传递给angular:
$scope.go = function (params) {
$location.path(decodeURIComponent(params));
};
答案 1 :(得分:2)
您也可以使用 unescape 代替decodeURIComponent。
请参阅下面的代码段 -
$scope.go = function (params) {
$location.path(unescape(params));
};
答案 2 :(得分:0)
我在angularJs项目中创建了一个过滤器来解码URL。 例如,如果您的网址是 - http://www.example.com/test1 test2 tes3
然后过滤制作这样的网址 - 的 http://www.example.com/test1-test2-tes3 强>
在我的角项目中,主应用名称是angularApp。
var app = angular.module('angularApp', []);// This is your main angular app.
现在您要为解码网址创建过滤器。
app.filter('decodeURL', function() {
return function(text) {
if(text) {
return text.split(' ').join('-').toLowerCase().replace(/[^a-z0-9]+/g, '-');
}
}
});
以上代码是创建一个过滤器来解码网址。我的过滤器名称是'decodeURL'。我们将在代码中使用decodeURL作为过滤器
如何在html中使用此过滤器 -
<a ui-sref="{{business.category[0].categoryName.toLowerCase()}}Detail({id:business.id,title:(business.title | decodeURL)})"></a>
//以上是针对angularjs中的状态路由。
<a href="/coupon/{{coupon.id}}/{{coupon.title | decodeURL}}"
class="btn btn-warning show-btnhome show-button-margin">Show</a>
//上面的网址重定向代码。