Как стать автором
Обновить

Комментарии 7

Я конечно не специалист по Vuejs, больше по React, но общую суть уловил. Такая же модель шаблонов используется в ASP.NET приложениях с шаблонизатором Razor. В Razor у шаблона страницы можно указать родительский шаблон с помощью которого будет отрисована страница. Но если переносить вашу логику на шаблоны Razor, то название шаблона layout: "green-layout" будет указываться в файле page.vue. Мне кажется роутер не должен знать о том в каком виде нужно отрисовывать компонент. Задача роутера — роутить компоненты. Роутер должен знать, что нужно вывести такой то компонент, а как его вывести (с каким шаблоном) это уже пусть сам компонент решает.


А вообще система с layout в Razor мне не очень нравится. Часто нужно прокинуть кусок кода в родительский компонент и тут начинаются танцы с бубном из кучи блоков прокидывания этого самого кода.


Поэтому для меня более предпочтительная модель построения страниц на React


/// router
<Router>
   <Route>
      <ComponentPage1>

/// сomponentPage1
<RootView layout="green">
   <PageView>
</RootView>

Где <RootView> это по сути ваш корневой layout, только прокидывание свойст получается как бы сверху, а не снизу. В случае с Razor прокидывание получается снизу на верх.

Layout полезная функция во Vue. Вот только в данном примере использовать его излишне. Шаблоны шапки фактически идентичны, за исключением цвета её фона. Вы нарушаете главное правило программирования — DRY. Возможно проще было бы менять css-класс у шапки в зависимости от роута

Если шаблоны отличаются только цветом шапки — не спорю. Но я этот механизм использую, если шаблоны имеют разную структуру. Например: главная страница — классические шапка и подвал, личный кабинет — готовый шаблон из компонентов vuetify, аутентификация и регистрация — чистый шаблон, на котором только ссылка на главную страницу.

Согласен

Согласен, но суть данного поста показать сам принцип смены layout'ов, а на каком примере уже второе дело

Чем такой вариант не подошёл?

//page 1
<template>
    <LayoutGreen>
        <h1>Зеленый шаблон</h1>
    </LayoutGreen>
</template>

//page 2
<template>
    <LayoutBlue>
        <h1>Синий шаблон</h1>
    </LayoutBlue>
</template>


То, что страница знает свой layout, а не роуты, как мне кажется, более логично.
Спасибо!
Этот пример оказался более понятным чем видео на ютубе по этой теме.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации