routeparams中的特殊字符在angularjs中执行两次控制器

时间:2013-08-30 17:41:35

标签: javascript angularjs angularjs-routing

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

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

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

因此,在重定向到此页面之前,我将encodeURIComponent设置为“keyword”。

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

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

  • 使用该符号的编码形式执行1st(#/ search /%24)
  • 使用实际符号(#/ search / $)执行第二次

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

我错过了某处或我的方法是不正确的。

1 个答案:

答案 0 :(得分: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, '+');
    }

在我将搜索关键字传递给网址

之前调用上述函数
$window.location.href = "/#/search/" + utils.encodeUriQuery(searchKeyword);

注意:utils是一家工厂。