我想要一个ui-router状态来匹配以下网址:
#/.../update?id
#/.../update?username
#/.../update?customerId&sandwichId
如果/更新'状态是活动的(它是一个路由组件),组件的控制器知道足以预期哪些参数将存在(通过提供的字符串数组应该/将匹配实际存在的任何查询参数)。
我可以将网址留在'#/ ... / update'隐含的理解是我不能从任何地方导航到该URL,而是它的父状态,只是将其主键字段作为组件绑定传递。显然,如果我只是在浏览器中输入URL,它就没有足够的信息可以加载。
根据我发现的here示例,我定义了我的更新'具有单个查询参数的状态:pkKeys。然后我在状态转换时将pkKeys定义为我想要的整个查询参数字符串。这有效地实现了我正在寻找的东西。但是,输入此内容并不合适:
#/.../update?pkKeys=username=test
此外,在更复杂的情况下,它看起来很丑陋:
#/.../update?pkKeys=customerId%3D3ae2e6eb-3bf7-42f8-a09c-9c690c8dbe15%26sandwichId%3D2cb6d513-06a3-4aa4-93bb-e53d279d95cb
理想情况下,我正在寻找一种以与上述网址模式匹配的方式配置状态的方法。我在$ location服务方面没有太大成功,但有些东西告诉我它与它有关。在我看来,只要$ state.go(...)被调用,就会清除$ location.search()。
提前感谢您的帮助!很高兴详细说明任何可能不清楚的事情。这是一个相当独特的问题集我发现自己在这里......
供参考,我使用的是Angular UI Router 1.x.我发现他们有动态参数的概念,这似乎几乎解决了我遇到的问题(请参阅GitHub issue进行此更改)。但是,如果失败了,状态配置仍然希望您列出动态参数的名称。由于我的查询参数名称是数据驱动的,因此名称集不是有限集。所以我需要动态参数...动态名称。