1

如何将关键字(包含特殊字符)作为 $routeParam 传递给 AngularJS 应用程序?

$routeProvider.when('/search/:keyword', {templateUrl:'someURL', controller:SearchCtrl})

关键字可以包含特殊字符。

因此,在重定向到此页面之前,我确实将URIComponent 编码为“关键字”。

当这个“关键字”有一些特殊字符,如“$、@、&、逗号”等时,控制器会执行两次。

EX:如果关键字有'$'符号,控制器

  • 以该符号的编码形式执行第一个 (#/search/%24)
  • 使用实际符号执行 2nd (#/search/$)

在 carat('^') 符号的情况下不会发生这种情况。

我错过了某个地方还是我的方法不正确。

4

1 回答 1

4

使用解决方法来处理这种情况:

utils.encodeUriQuery = function (val) {
        return encodeURIComponent(val).
            replace(/%40/gi, '@').
            replace(/%3A/gi, ':').
            replace(/%24/g, '$').
            replace(/%2C/gi, ',').
            replace(/%26/gi, '&').
            replace(/%3D/gi, '=').
            replace(/%2B/gi, '+');
    }

在我将搜索关键字传递给 URL 之前调用上述函数

$window.location.href = "/#/search/" + utils.encodeUriQuery(searchKeyword);

注意: utils 是一个工厂。

于 2013-11-06T18:37:21.087 回答