Как скрыть шаблон 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;
  }
}
Добавить комментарий