【问题标题】:Angularjs route executes twice with particular querystringAngularjs 路由使用特定的查询字符串执行两次
【发布时间】:2014-04-29 15:24:35
【问题描述】:

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

我正在使用可以正常工作的基本 $routeProvider,但有一个例外:当我调用像

这样的特殊 url

host:port/app/index.html#/products?features=contracttype=loyalty&sn=value&filter=2351&20

控制器被调用两次:

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

  2. 第二次修改查询字符串:
    features=contracttype&sn=value&filter=2351

我已将调试代码放在 $routeProvider.config 函数中,而

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

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

当我有一个常规的 qs 时,其他一切都可以正常工作,例如 ?param1=value2&param2=value2...

我的问题是如何获取查询字符串 unmodified ,为什么控制器会被初始化两次?

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

【问题讨论】:

    标签: angularjs query-string angularjs-routing


    【解决方案1】:

    你有两个等号,可能是&之间?

    【讨论】:

    • 我无法更改 URL,它的传统,即使它很“奇怪”。我要做的就是获取整个字符串,并将其传递给知道如何处理它的后端(这也是遗留的),尽管它很奇怪。
    • 遗留是什么意思?
    • 我建议更新生产模块。我以前从未见过这种约定;从长远来看,它只会给你带来麻烦。
    【解决方案2】:

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

    【讨论】:

    • 我知道 URL 不正确,但我无法更改它,这是遗留问题。我要做的就是获取整个字符串,并将其传递给知道如何解释它的后端(这也是遗留的)。
    【解决方案3】:

    我认为实现这一点的唯一方法是对您的网址进行编码,因为使用两个等于它是无效的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-07
      • 2015-04-12
      • 2013-11-02
      • 2014-08-23
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      相关资源
      最近更新 更多