角度资源编码URL

时间:2013-05-23 01:19:13

标签: angularjs urlencode angular-resource

我的资源定义如下:

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

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

3 个答案:

答案 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作为过滤器

See the snapshot

如何在html中使用此过滤器 -

<a ui-sref="{{business.category[0].categoryName.toLowerCase()}}Detail({id:business.id,title:(business.title | decodeURL)})"></a>

//以上是针对angularjs中的状态路由。

See the snapshot

<a href="/coupon/{{coupon.id}}/{{coupon.title | decodeURL}}"
                                       class="btn btn-warning show-btnhome show-button-margin">Show</a>

//上面的网址重定向代码。

See the snapshot