Может ли класс, реализующий RouterLayout, также быть определен как @Route - PullRequest
2 голосов
/ 31 марта 2019

Я изучаю Vaadin Flow (Vaadin v10) и испытываю трудности с понятиями Route (@Route как аннотация) и RouterLayout.

Из документации, которую я уже прочитал на веб-сайте Vaadin!Я не смог определить ответ на конкретный вопрос.

Может ли класс, реализующий RouterLayout, также быть определен как @Route?

@Route("")
public class MainLayout extends Div implements RouterLayout {
}

Пожалуйста (если возможно)предоставить ссылку на некоторую документацию.Насколько я понимаю, RouterLayout предназначен для визуализации представлений в нем.Поэтому при необходимости метод public void showRouterLayoutContent(HasElement content) может быть переопределен для создания желаемого макета.Таким образом, размещение аннотации @Route, которая по существу определяет представление, не имеет смысла смешивать с RouterLayout?

Или так?Если RouterLayout можно использовать с аннотацией @Route, то предполагается, что макет также является представлением;Могут ли некоторые предоставить мне простой сценарий, где это может быть полезно?

1 Ответ

0 голосов
/ 01 апреля 2019

Как вы сказали - на концептуальном уровне кажется странным, что и @Route, и RouterLayout в одном классе.@Route аннотации размещаются на листовых узлах.У вас может быть автономный @Route, который будет помещен в элемент <body>, или у вас может быть вложенный макет, в котором маршрут отображается внутри одного или нескольких родительских макетов.Родительский макет может быть указан со вторым параметром аннотации, например,

@Route(value = "users", layout = Dashboard.class)
public class Users extends Div {
//...

, где Dashboard необходимо реализовать RouterLayout.Таким образом, вы получите доступ к этому маршруту с помощью http://server-address-here/users, и он будет отображать Users внутри Dashboard.

Если вы хотите иметь более описательный URL, вы можете реализовать это с помощью аннотации @RoutePrefix на Dashboard:

@RoutePrefix("dashboard")
public class Dashboard extends VerticalLayout implements RouterLayout { 
// ...

, и теперь вы достигнете Usersвид с http://server-address-here/dashboard/users, в то время как в остальном все останется таким же, как и раньше.

...