我有一个查询参数,比如说'locale'
。当用户第一次加载应用程序时,如果他们没有指定 a ?locale=...
,那么我想检测一个并立即设置查询参数。(这样,如果他们共享 URL,其他人将准确地看到他们所看到的内容。如果您认为这对于语言环境来说是个坏主意,请想象另一个上下文查询参数,例如account
.)
因此,如果用户直接导航到/foo/bar?locale=es
,那么他们会留在那里。如果他们导航到/foo/bar
,则 URL 立即切换到/foo/bar?locale=en
并呈现 foo 页面。
尝试 1
beforeModel(transition) {
if (transition.queryParams.locale == null) {
return this.transitionTo({ queryParams: { locale: 'en' } });
}
}
这无济于事。在转换结束时,URL 没有?locale=en
.
尝试 2
beforeModel(transition) {
if (transition.queryParams.locale == null) {
this.send('switchLocale', 'en');
}
},
actions: {
switchLocale(locale) {
this.controllerFor('application').set('locale', locale);
this.refresh();
}
}
这会引发以下异常:
处理路由时出错:foo.bar 无法触发操作“switchLocale”,因为您的应用尚未完成转换到其第一个路由。要在转换期间触发目标路由上的操作,您可以调用传递给挂钩
.send()
的对象。Transition
model/beforeModel/afterModel
尝试 3
与 (2) 相同,但使用transition.send('switchLocale', 'en')
.
这可以防止错误,但我们回到它什么也没做。