Компоненты представляют элементы, к которым компилятор Vue прикрепляет некоторое поведение. Компоненты позволяют инкапсулировать код и затем использовать его многократно в различных частях приложения.
Для создания компонента используется функция Vue.component(tagName, options), где параметр tagName - кастомный элемент html, который будет представлять компонент, а параметр options представляет конфигуацию компонента.
Например, определим простейший компонент:
<!DOCTYPE html> <html> <head> <title>Компоненты Vue.js</title> <meta charset="utf-8" /> </head> <body> <div id="app"> <hello></hello> <hello></hello> </div> <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script> <script> Vue.component('hello', { template: '<h2>Hello</h2>' }) new Vue({ el: "#app" }); </script> </body> </html>
Здесь определен компонент для элемента hello. И неважно, что такого элемента в html нет, мы его сами создаем. Более того мы не можем использовать для компонента встроенные элементы html типа div или h2. То есть по сути компонент называется "hello".
В объекте options, который передается компоненту, через свойство template можно задать html-разметку, которую будет содержать компонент. В итоге данная разметка будет вставляться
вместо элемента <hello></hello>
.
При этом компонент должен быть определен до элемента Vue, в котором он используется.
И при рендеринге страницы вместо элемента hello будет вставлено содержимое компонента:
При этом мы можем многократно использовать компонент в рамках приложения Vue, и в каждом случае будет происходить рендеринг компонента.
Причем компонент может использоваться только в рамках того элемента, к которому прикреплен объект Vue. То есть мы не можем написать наподобие, вынеся использование компонента во вне:
<hello></hello> <div id="app"> </div>