Как скрыть шаблон Vue. js пока он не отрендерится. Директива [v-cloak]

24 августа 2019

Бывают ситуации, когда вы загружаете страницу с каким-то компонентом Vue, и при этом страница при загрузке «прыгает»: сначала показывает синтаксис шаблона Vue, а потом рендерит сам шаблон. Вот пример:

Страница загрузилась, а компонент Vue ещё не отрендерился

Починить это легко — добавляем к родительскому элементу директиву v-cloak, прописываем стили и всё. Со стилями можно поэкспериментировать.

<template>
    <div v-cloak>
        ...
    </div>
</template>

<style>
[v-cloak] {
    display: none;
}
</style>

Подробнее об этой фиче читайте в документации.

Крутящаяся анимация для v-cloak

Показываем анимированный спинер, пока компонент не отрендерился:

[v-cloak] {
  display: block;
  padding: 50px 0;

  @keyframes spinner {
    to {
      transform: rotate(360deg);
    }
  }

  &:before {
    content: '';
    box-sizing: border-box;
    position: absolute;
    top: 50%;
    left: 50%;
    width: 20px;
    height: 20px;
    margin-top: -10px;
    margin-left: -10px;
    border-radius: 50%;
    border: 2px solid #ccc;
    border-top-color: #333;
    animation: spinner .6s linear infinite;
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
  }

  & > div {
    display: none;
  }
}
Комментарии 4
  1. Сергей 3 марта 2020

    Чётко и кратко. Топ

  2. Abror 28 июля 2021

    Спасибо!

  3. Ума 29 августа 2021

    У меня есть 500 массивов. Через PHP цикл foreach показываю нужные данные. И есть всего лишь 2 элементы в VUE js коде summ:11 111 111 и btnSave: true. Без Vue Страница грузится моментально. А с VUE очень заметно синтаксис шаблона Vue {{ summ:11 111 111 }}. Почему если даже 1 элемент Vue так долго рендерит шаблон.

  4. Кирилл Арутюнов 30 августа 2021

    Стоит замерить скорость каким-нибудь лайтхаусом, чтобы понять что именно долго грузится. Вероятно, у вас просто сам Vue инициализируется долго и подгружается откуда-то по CDN.

Добавить комментарий