Javascript 路由图中的特殊字符在angularjs中执行控制器两次
如何将关键字(包含特殊字符)作为$routeParam传递给AngularJS应用程序Javascript 路由图中的特殊字符在angularjs中执行控制器两次,javascript,angularjs,angularjs-routing,Javascript,Angularjs,Angularjs Routing,如何将关键字(包含特殊字符)作为$routeParam传递给AngularJS应用程序 $routeProvider.when('/search/:keyword',{templateUrl:'someURL',controller:SearchCtrl}) 此关键字可以包含特殊字符 所以,在重定向到这个页面之前,我没有将组件编码到“关键字” 当这个“关键字”有一些特殊字符,如“$,@,&,逗号”等时,控制器将执行两次 例: 如果关键字有“$”符号, 控制器 使用该符号的编码形式(#/sear
$routeProvider.when('/search/:keyword',{templateUrl:'someURL',controller:SearchCtrl})
此关键字可以包含特殊字符
所以,在重定向到这个页面之前,我没有将组件编码到“关键字”
当这个“关键字”有一些特殊字符,如“$,@,&,逗号”等时,控制器将执行两次
例:
如果关键字有“$”符号,
控制器
- 使用该符号的编码形式(#/search/%24)执行第一个
- 使用实际符号(#/search/$)执行第二个
我是否遗漏了某个地方,或者我的方法不正确。使用解决方案来处理这种情况:
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是一个工厂。使用解决方案来处理此类场景:
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是一个工厂。答案不太清楚。您还应该提供what's utils,因为我得到了引用错误。请改进你的回答这只是一个想法,utils是一个工厂,是的,我的第二个片段中有一个拼写错误,谢谢。谢谢,现在它有意义了:-)答案不太清楚。您还应该提供what's utils,因为我得到了引用错误。请改进您的回答这只是一个想法,utils是一个工厂,是的,我的第二个片段中有一个拼写错误,谢谢。谢谢,现在它有意义了:-)