Vaadin Flow:设置标题

Ger*_*zek 9 html-title vaadin vaadin-flow

我目前尝试设置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{}
Run Code Online (Sandbox Code Playgroud)

尝试次数

  1. 为此,我尝试在UI.getCurrent().getPage().setTitle("demo title")期间致电afterNavigation。不幸的是,这不适用于初始导航(也没有添加attachListener)。

  2. 我也尝试使用PageConfigurator最外层的进行配置,RouterLayout如下所示:

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{}
Run Code Online (Sandbox Code Playgroud)
  1. HasDynamicTitle只有在实现类也定义了@Route而不是封装的情况下,似乎才起作用RouterLayout

问题

由于某种原因,Router它本身会在导航期间设置标题。

setTitleCall的堆栈跟踪

Router定义标题使用JS和重新定义document.title,同时Page.setTitle似乎只修改html.head.title标签。


如何在单个位置设置标题?
如何防止Router表单将标题设置为当前URL的值?


注意

使用@PageTitle注释不是一个选项,因为在我的情况下,在编译时不知道标题。

LOL*_*dad 3

固定标题

如果您的页面标题不变,您只需使用注释对其进行设置即可@PageTitle

@PageTitle("home")
class HomeView extends Div {

  HomeView(){
    setText("This is the home view");
  }
}
Run Code Online (Sandbox Code Playgroud)

动态标题

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";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

来源