Javascript 路由图中的特殊字符在angularjs中执行控制器两次

Javascript 路由图中的特殊字符在angularjs中执行控制器两次,javascript,angularjs,angularjs-routing,Javascript,Angularjs,Angularjs Routing,如何将关键字(包含特殊字符)作为$routeParam传递给AngularJS应用程序 $routeProvider.when('/search/:keyword',{templateUrl:'someURL',controller:SearchCtrl}) 此关键字可以包含特殊字符 所以,在重定向到这个页面之前,我没有将组件编码到“关键字” 当这个“关键字”有一些特殊字符,如“$,@,&,逗号”等时,控制器将执行两次 例: 如果关键字有“$”符号, 控制器 使用该符号的编码形式(#/sear

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

$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是一个工厂,是的,我的第二个片段中有一个拼写错误,谢谢。谢谢,现在它有意义了:-)