首页 > 解决方案 > AngularJS - ui路由器 - 无法将url参数键与感叹号匹配

问题描述

我的应用程序中有多个状态,我使用这样的 $stateProvider 定义:

.state(STATES.s1,
  {
    url: "/?refnr"
    template: ...
  })
.state(STATES.s2,
  {
    url: "/?details&searchID&pos"
    template: ...
  })

现在我想要第三种状态,我想在其中捕获包含特定 url 参数的所有 url,其中包括感叹号。这是参数“emp!” 在 url 中看起来像这样,值为“.../?emp!=45”。我将其定义为我的状态:

.state(STATES.s3,
  {
    url: "/?emp!"
    template: ...
  })

不工作。它与 url 不匹配。我还尝试使用$urlMatcherFactoryProvider并提供已编译的匹配器作为 url,但结果相同。我也尝试使用编码版本!在我的状态 url 定义中是这样的:

url: "/?emp%21" 

还是一样的结果。

为什么呢?我怎样才能匹配这些网址?

标签: angularjsangular-ui-router

解决方案


尝试这样的事情。花括号之间的表达式是匹配您的条件的正则表达式。

.state(STATES.s3, {
  url: "/{^\?.*emp!$}"
  template: ...
})

该正则表达式将匹配以 开头?、 结尾!emp之前的 url !。喜欢:

  • ?麻!
  • ?param=值&温度!

推荐阅读