我已经实现了路由来匹配 ExtJS7 中的查询参数,并使用以下路由代码
':node:params': {
before: 'isLoggedIn',
action: 'onAction',
conditions: {
':params': '(^\\?[%a-zA-Z0-9\\-\\_\\s,&=]+)'
}
}
我也尝试过以下代码
':node?:params': {
before: 'isLoggedIn',
action: 'onAction'
}
在这两种情况下,带有查询参数的路由不会与上述路由匹配,而是调用
unmatchedroute
操作
您无法将路由与查询参数相匹配。路由器根据
window.location.hash
进行匹配 - URL 中 #
之后的部分。查询参数是 window.location.querystring
的一部分;没有重叠。
您可以参数化路线 - 但不能使用查询参数。
我知道我迟到了三年,但是可以使用“?”作为 extjs 路由器的“params”标识符,因此您可以让路由器匹配 #action/123 和 #action/123?a=b,您只需要适合您的条件的正则表达式。我使用类似的东西:
'action:params': {
before: 'isLoggedIn',
action: 'onAction',
conditions: {
':params': '(?:(?:\\\??){1}([%=&a-zA-Z0-9\\-\\_\\s,&=]+))?'
}
}
用“?”将输入包装在非捕获组中末尾的量词允许导航到#action,无需后续查询。您还需要转义反斜杠和“?”在内部非捕获组中为“\?”所以正则表达式被正确解析为“?”。
我发现的唯一可能奇怪的交互是,如果路由器只收到“#my-view?”如果没有后续查询字符串,则 onAction 方法将传递“?”对于“params”,但这很容易解释。