Vue.js - это простой в использовании фреймворк для веб-приложений, который мы можем использовать для разработки интерактивных интерфейсных приложений.
В этой статье мы рассмотрим альтернативные способы определения шаблонов и управления обновлениями.
Альтернативные способы определения шаблонов
Встроенные шаблоны
Когда атрибут inline-template
присутствует в дочернем компоненте, компонент будет использовать его внутреннее содержимое в качестве своего шаблона, а не рассматривать его как распределенное содержимое.
Однако объем данных, доступных внутри, может сбить с толку, поскольку у нас есть доступ к области дочернего компонента, а не к родительскому компоненту внутри тегов.
Например, если у нас есть:
src/index.js
:
Vue.component("bar", { data() { return { baz: "bar" }; }, template: ` <p></p> ` }); new Vue({ el: "#app", data: { foo: "foo" } });
index.js
:
<!DOCTYPE html> <html> <head> <title>App</title> <meta charset="UTF-8" /> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <bar inline-template> <div> {{baz}} </div> </bar> </div> <script src="src/index.js"></script> </body> </html>
Тогда {{bar}}
ссылается на baz
из bar
компонента. Он также переопределяет шаблон, который мы определили в bar
.
X-шаблоны
Другой способ определения шаблонов - использовать тег script
с типом text/x-template
. Затем на него можно ссылаться с помощью идентификатора.
Например, мы можем написать:
src/index.js
:
Vue.component("hello", { data() { return { hello: "hello" }; }, template: "#hello-template" }); new Vue({ el: "#app", data: { foo: "foo" } });
index.html
:
<!DOCTYPE html> <html> <head> <title>App</title> <meta charset="UTF-8" /> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <script type="text/x-template" id="hello-template"> <p>{{hello}}</p> </script> <div id="app"> <hello></hello> </div> <script src="src/index.js"></script> </body> </html>
Код:
<script type="text/x-template" id="hello-template"> <p>{{hello}}</p> </script>
- это наш шаблон, и мы ссылались на него, используя его идентификатор в:
template: "#hello-template"
Таким образом, на странице отображается hello
. Этого следует избегать для производственных приложений, поскольку они отделяют шаблоны от остальной части определения компонента.
Контроль обновлений
Vue может контролировать обновления просмотра с помощью своей системы реактивности в большинстве случаев. Однако есть некоторые крайние случаи, когда мы хотим сами контролировать обновления.
Принудительное обновление
Вероятно, что мы где-то допустили ошибку, если нам приходится принудительно обновлять почти во всех случаях.
В тех маловероятных случаях мы можем использовать $forceUpdate
.
Используйте v-once для рендеринга статических компонентов
Мы можем использовать v-once
для кеширования статического содержимого после его визуализации. Это полезно для страниц с большим количеством статического контента.
Например, мы можем использовать это так:
src/index.js
:
Vue.component("hello", { template: ` <div v-once>hello</div> ` }); new Vue({ el: "#app" });
index.html
:
<!DOCTYPE html> <html> <head> <title>App</title> <meta charset="UTF-8" /> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <hello></hello> </div> <script src="src/index.js"></script> </body> </html>
Это удобно в редких случаях, когда нам нужно отрисовывать много статического контента, но в этом нет необходимости, если мы действительно не видим медленную визуализацию.
Это может вызвать проблемы, если мы захотим отображать динамический контент позже и когда разработчики не знакомы с v-once
работой над кодом. Они могут быть сбиты с толку относительно того, почему компонент не обновляется.
Заключение
Мы можем определять шаблоны внутри компонента с атрибутом inline-template
или с помощью элемента script
с типом text/x-template
.
Затем мы можем ссылаться на него по его идентификатору в коде нашего компонента.
Мы можем использовать $forceUpdate
для принудительного обновления и v-once
для кэширования содержимого после его визуализации, что может быть полезно для статического содержимого. Однако их не следует использовать почти все время.