应用和组件实例
创建一个应用实例
每个 Vue 应用都是通过用 createApp
函数创建一个新的应用实例开始的:
1 | const app = Vue.createApp({ /* 选项 */ }) |
应用实例暴露的大多数方法都会返回该同一实例,允许链式:
1 | Vue.createApp({}) |
传递给 createApp
的选项用于配置根组件。当我们挂载应用时,该组件被用作渲染的起点。
注意:一个应用需要被挂载到一个 DOM 元素中。
例如:如果我们想把一个 Vue 应用挂载到<div id="app"></div>
,我们应该传递#app
:
1 | const RootComponent = { /* 选项 */ } |
组件实例 property
在data
中定义的property
是通过组件实例暴露的:
1 | const app = Vue.createApp({ |
可以将用户定义的property
添加到组件实例中,例如methods
,props
,computed
,inject
和setup
。
Vue还通过组件实例暴露了一些内置property
,如$attrs
和$emit
。这些property
都有一个$
前缀,以避免与用户定义的property
名冲突。
生命周期钩子
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeUnmount
- unmounted
常用指令
指令 (Directives) 是带有v-
前缀的特殊 attribute。
v-once
不需要表达式,只渲染元素和组件一次。即:只要给元素或者组件添加了v-once
指令,那么元素或者组件只会渲染一次,无论组件实例中property的值
怎么改变,元素或者组件都不会被重新渲染。
1 | <div id="app"> |
v-html
更新元素的 innerHTML。
注意:内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译。
1 | <div id="app"> |
v-bind
动态地绑定一个或多个attribute
,或一个组件prop
到表达式。可以直接缩写:
在绑定class
或style
attribute 时,支持其它类型的值,如数组或对象。
1 | <img v-bind:src="imageSrc" /> |
v-if
根据表达式的真假值来有条件地渲染元素。
当和v-if
一起使用时,v-for
的优先级比v-if
更高。
1 | <div v-if="flag">你看见我了</div> |
v-else
前一兄弟元素必须有 v-if 或 v-else-if。
1 | <div v-if="Math.random() > 0.5"> |
v-else-if
前一兄弟元素必须有 v-if 或 v-else-if。
1 | <div v-if="type === 'A'"> |
v-show
根据表达式的真假值,切换元素的display CSS property
。
当条件变化时该指令触发过渡效果。
1 | <div v-show>看见我了</div> |
与v-if
的区别:
v-if
是通过控制dom节点的存在与否来控制元素的显隐,对元素进行销毁和重建;v-show
是通过设置DOM元素的display
样式,block为显示,none为隐藏,简单地 CSS 对元素进行切换;v-if
会使得页面重绘,v-show
则只是是页面重排;
一般来说v-if
有更高的切换开销,而v-show
有较高的初始渲染开销,因此,如果需要非常频繁的切换,则试用v-show
较好,如果在运行时条件很少改变,则使用用v-show
较好