组件化
Vue 的组件化核心是组件系统,利用 ES 模块化完成了 Vue 组件系统的构建
组件化 是 抽象小型、独立、可预先定义配置、可利用的组件
- 小型 页面的构成拆分成一个个小单元
- 独立 每一个小单元心可能都独立开发
- 预先定义 小单元都可以先定义好,在需要的时候导入使用
- 预先配置 小单元可以接收一些在使用时需要的一些配置
- 可复用 小单元可以在多个地方使用
可利用性要适当地考量
- 有些组件确实是不需复用
- 可配置性越高, 功能性就越强
组件最大的作用是独立开发、预先配置
- 为了更好的维护和扩展
应用实例
createApp -> 创建 APP -> 返回一个应用实例
应用实例主要用来注册全局组件
- 实例上暴露了很多方法
- component 注册组件
- directive 注册指令
- filter 注册过滤器
- use 使用插件
- 大多数这样的主方法都会返回 createApp 创建出来的应用实例
允许链式操作 ```javascript // Application 应用 const app = Vue.createApp({});
// 返回原本的应用实例
app.component(‘MyTitle’, {
data() {
return {
title: ‘I LOVE VUE!!!’
}
},
template: <h1 v-to-lower-case>{{ title }}</h1>
}).directive(‘toLowerCase’, {
mounted(el) {
el.addEventListener(‘click’, function() {
this.innerText = this.innerText.toLowerCase();
}, false);
}
});
app.mount(‘#app’);
```html<div id="app"><my-title></my-title></div>
根组件
根组件的本质就是一个对象 {}
createApp 执行的时候需要一个根组件 createApp({})
根组件是 Vue 渲染的起点
根元素是一个 HTML 元素
createApp 执行创建 Vue 应用实例时,需要一个 HTML 根元素 <div id="app"></div>
const RootComponent = {data() {return {a: 1,b: 2,total: 0}},mounted() {this.plus();},methods: {plus() {return this.a + this.b;}},template: `<h1>{{ a }} + {{ b }} = {{ total }}</h1>`}const app = Vue.createApp(RootComponent);const vm = app.mount('#app');
mount 方法执行返回的是根组件实例
vm -> ViewModel -> MVVM -> VM
Vue 不是一个完整的 MVVM 模型
组件实例
每个组件都有自己的组件实例
一个应用所有组件都共享一个应用实例
无论是根组件还是应用内其它的组件,配置选项、组件行为是都一样的
const MyTitle = {props: ['content']template: `<h1 :title="content"><slot></slot></h1>`,mounted() {console.log(this);}}const MyAuthor = {template: `<p>Author: <slot></slot></p>`}const MyContent = {template: `<p @click="toLowerCase"><slot></slot></p>`,methods: {toLowerCase() {this.$emit('to-lower-case');}}}const App = {component: {MyTitle,MyAuthor,MyContent},data() {return {title: 'This is a TITLE',author: 'Xiaoye',content: 'This is a CONTENT'}},template: `<div><my-title :content="title">{{ title }}</my-title><my-author>{{ author }}</my-title><my-content @to-lower-case="toLowerCase">{{ content }}</my-title></div>`,methods: {toLowerCase() {this.content = this.content.toLowerCase();}}}const app = Vue.createApp(App);const vm = app.mount("#app“)
组件实例可以添加一些属性 property
data / props / components / methods …
this -> $attres / $emit Vue 组件实例内置方法 $
