我目前正在尝试设置页面的title
。
public class A extends FlexLayout implements RouterLayout {}
@Route(value = "b", layout = A.class)
public class B extends FlexLayout{}
@Route(value = "c", layout = A.class)
public class C extends FlexLayout{}
为此,我尝试在UI.getCurrent().getPage().setTitle("demo title")
期间致电afterNavigation
。不幸的是,这不适用于初始导航(也无法添加attachListener
)。
我还尝试使用最外面的PageConfigurator
上的RouterLayout
来配置它,如下所示:
@Override
public void configurePage(InitialPageSettings settings) {
settings.addMetaTag("title", "demo title");
settings.addMetaTag("og:title", "demo title");
settings.addFavIcon("icon", "frontend/images/favicon.ico", "48x48");
}
HasDynamicTitle
似乎只有在实现类也定义了@Route
而不是封装RouterLayout
出于某种原因,Router
本身会在导航期间设置标题。
Router
使用JS定义了标题并重新定义了document.title
,而Page.setTitle
似乎只修改了html.head.title
标签。
如何在单个位置设置标题?
如何防止Router
表单将标题设置为当前URL的值?
使用@PageTitle
注释不是一种选择,因为在我的情况下,在编译时标题是未知的。
答案 0 :(得分:0)
根据您的评论,我认为您是出于完全的原因以及其他可能为此而苦苦挣扎的人来弄清楚这是怎么回事:
Vaadin Flow官方文档建议使用HasDynamicTitle
。
请参见以下示例:
@Route(value = "blog")
class BlogPost extends implements HasDynamicTitle, HasUrlParameter<Long> {
private String title = "";
@Override
public String getPageTitle() {
return title;
}
@Override
public void setParameter(BeforeEvent event,
@OptionalParameter Long parameter) {
if (parameter != null) {
title = "Blog Post #" + parameter;
} else {
title = "Blog Home";
}
}
}
如果您有静态的页面标题,则可以使用注释设置它:
@PageTitle("home")
class HomeView extends Div {
HomeView(){
setText("This is the home view");
}
}