8

我有一个资源定义如下:

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 的组合无济于事。

任何帮助将不胜感激,谢谢!

4

3 回答 3

9

由于 URL 已经是 URIencoded,因此您需要在将其传递给 Angular 之前对其进行解码:

$scope.go = function (params) {
    $location.path(decodeURIComponent(params));
};
于 2013-05-23T06:24:02.527 回答
2

您也可以使用unescape代替 decodeURIComponent。

请参阅下面的代码片段 -

$scope.go = function (params) {
    $location.path(unescape(params));
};
于 2016-01-20T08:59:08.477 回答
0

我在 angularJs 项目中创建了一个过滤器来解码 URL。 例如,如果您的网址是 - http://www.example.com/test1 test2 tes3

然后过滤使 URL 像这样- http://www.example.com/test1-test2-tes3

在我的 Angular 项目中,主要应用名称是 angularApp。

var app = angular.module('angularApp', []);// This is your main angular app.

现在您要为解码 url 创建一个过滤器。

app.filter('decodeURL', function() {
    return function(text) {
        if(text) {
            return text.split(' ').join('-').toLowerCase().replace(/[^a-z0-9]+/g, '-');
        }
    }
});

上面的代码是创建一个过滤器来解码 url。我的过滤器名称是 '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>

//上面的URL重定向代码。

查看快照

于 2017-01-18T11:39:16.900 回答