javascript - routeparams中的特殊字符在angularjs中执行 Controller 两次

标签 javascript angularjs angularjs-routing

如何将关键字(包含特殊字符)作为 $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/

相关文章:

javascript - 正则表达式 Javascript,带空格的负前瞻

javascript - AngularJS基于滚动的路由

javascript - Angularjs + Typescript,如何将 $routeParams 与 IRouteParamsService 一起使用

javascript - Angular JS - UI路由器不工作

javascript - 如何使用 Lodash 按多个键分组并将其值汇总到对象数组中?

angularjs - 如何将纯 Angular 应用程序从 Visual Studio Team System 部署到 Azure 网站

javascript - 图片上传预览在 IE 上太慢

angularjs - 错误 : [$injector:unpr] Unknown provider: $$rAFProvider

javascript - react 逃离鼠标按下事件

javascript - 动态填充两个对象之间的空间