Angularjs路由使用特定的查询字符串执行两次

时间:2014-04-29 15:24:35

标签: angularjs query-string angularjs-routing

我正在开发一个SPA AngularJs应用程序,它必须处理一些特定的遗留URL。

我正在使用基本的$ routeProvider工作正常,但有一个例外:当我调用一个特殊的网址时

主机:端口/应用/ index.html中#/产品特征=合约类型=忠诚&安培; SN =值安培;过滤器= 2351&安培; 20

控制器被调用两次:

  1. 第一次使用正确的查询字符串: features = contracttype = loyalty& sn = value& filter = 2351& 20

  2. 第二次修改查询字符串:
    功能=合约类型&安培; SN =值安培;过滤器= 2351

  3. 我已将调试代码放在$ routeProvider.config函数和

    .when('/products',
    {
        controller: 'ProdCtrl',
        templateUrl: 'partials/prod.html'
    })
    

    被调用两次,但只有当我有这种特殊类型的URL时才会被调用。

    当我有一个常规的qs时,其他一切正常,比如?param1 = value2& param2 = value2 ...

    我的问题是如何才能获得查询字符串未修改,为什么控制器会初始化两次?

    我必须要知道我无法更改查询字符串(由于遗留问题),我所能做的就是将其传递给后端应用程序。

3 个答案:

答案 0 :(得分:0)

你有两个相同的标志,可能是&间?

答案 1 :(得分:0)

您的原始查询字符串不正确,它不能是a = b = c,因此路由器会尝试按其认为最佳方式对其进行更正。

答案 2 :(得分:0)

我认为实现这一目标的唯一方法是编码你的网址,因为有两个等于它是无效的。

var newUrl = encodeURIComponent("...?features=contracttype=loyalty&...");