使用案例
当直接访问应该像 /about
、 /changelog
等那样被推送的根路由(例如在浏览器中按 F5)时,由于没有可以弹出的路由,因此不会有 BackButton
。支持在堆栈后面添加路由的功能将非常方便,这样它就不会是:[ '/changelog' ]
,而是 [ '/' , '/changelog' ]
。
建议
GoRoute(
path: '/changelog',
defaultPopTo: '/', // will pop to '/' if the navigator cannot pop
)
在后台,这将向页面堆栈添加 /
页面,从而使 BackButton
出现在脚手架中。
7条答案
按热度按时间5ktev3wc1#
你是如何访问这些路由的?
BackButton
,因为你的堆栈包含你的上一个路由。go
或从深度链接访问它们,也许你应该将这些路由嵌套在你期望的“弹出默认路由”中:这应该符合你的预期。
ftf50wuq2#
以下是更详细的解释:
在我们的应用程序中,我们有
/account-dashboard-seller
和/account-dashboard-customer
。用户可以在卖家或客户模式之间切换。在两个帐户 Jmeter 板页面上,当我们按下“关于”时,会推送/about
页面。虽然这在只有一个帐户 Jmeter 板的情况下起作用:
你可以有
但我们的要求是将
/about
作为顶级页面,因为它不需要保护其他路由(未经身份验证的用户可以访问它)。出于这个原因,我们没有使用上面的方法,而是简单地将
/about
等放在顶级位置,并添加了BackButton
并手动处理,这对我们的使用场景有益。所以尽管我们今天让它工作了,但也许这对其他人有用。
k2fxgqgv3#
当你说 "当我们按下 '关于' 时,/about 页面被推送。" 时,你是使用
GoRouter.go
方法还是GoRouter.push
?因为如果你使用
GoRouter.push
,那么这个配置应该可以工作:例如,当你在
/account-dashboard-seller
时,历史堆栈看起来像[..., /account-dashboard-seller]
。GoRouter.push("/about")
,历史堆栈应该变为[..., /account-dashboard-seller, /about]
。GoRouter.pop()
时,它应该回到[..., /account-dashboard-seller]
。对于
[..., /account-dashboard-customer]
也有相同的情况。这种方法有问题吗?
j91ykkif4#
@ValentinVignal,我们使用哪种方法并不重要。问题在于页面刷新时,而不是在导航之后。
因此,
/about
页面应该被推送,但用户可以按下F5并停留在/about
上。因此,必须手动添加一个后退按钮。除非你有像你之前所说的那样,让
/about
成为/
的子元素。然而,这对我们来说行不通。s4chpxco5#
重新开放,因为回到它,我仍然相信这会有所帮助。更新原始文本以使其更清楚地表明问题的一部分是页面刷新
j8ag8udp6#
所以,/about页面是有意被推送的,但没有什么能阻止用户按下F5并卡在/about页面上。因此,必须手动添加一个后退按钮。
你确定按F5不能返回吗?当前的逻辑会将整个路由堆栈存储到浏览器历史记录中,即使它们是强制推送的。
此外,我认为你可以实现自己的backButton,它将调用context.go('/')。
zed5wv107#
在网页上,用户可以输入一个URL并直接访问它。因此,在这里存储的任何内容都是无关紧要的。此外,我认为你可以实现自己的返回按钮,它将调用context.go('/')
确切地说,这就是这个问题所在。添加这些按钮(尽管并不需要太多努力)可能会更容易使用默认弹出窗口。这个问题是为了衡量对这种功能的兴趣,并看看这样的API是否可接受。
这里的想法是,你可以更控制(有效的)堆栈内的go路由器路由声明,而不是分散返回按钮。再次,这只是一个想法