如何将关键字(包含特殊字符)作为 $routeParam 传递给 AngularJS 应用程序?
$routeProvider.when('/search/:keyword', {templateUrl:'someURL', controller:SearchCtrl})
此关键字 可以包含特殊字符。
因此,在重定向到此页面之前,我对“关键字”进行了 encodeURIComponent。
当这个“关键字”中有一些特殊字符,如“$、@、&、逗号”等,那么 Controller 就执行了两次。
例如: 如果关键字带有“$”符号, 控制者
- 使用该符号的编码形式执行 1st (#/search/%24)
- 使用实际符号 (#/search/$) 执行第二次
这不会发生在 carat('^') 符号的情况下。
我是不是错过了什么地方或者我的方法不正确。
最佳答案
使用变通方法来处理这种情况:
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 是一个工厂。
关于javascript - routeparams中的特殊字符在angularjs中执行 Controller 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538620/