改用 createApp 初始化实例
vue2 使用 new Vue() 初始化实例
vue3 使用 Vue.createApp() 初始化实例
新增 emits 选项
vue3 选项式API中新增了emits 选项,用于显示声明组件中的自定义事件,自定义事件的名称,需用 on
开头。
export default {
emits: ['onMyEvent1','onMyEvent2']
}
在 setup 中通过解构上下文可以获取自定义事件。
export default {
emits: ['onInFocus', 'onSubmit'],
setup(props, ctx) {
ctx.emit('onSubmit')
}
}
或
export default {
emits: ['onInFocus', 'onSubmit'],
setup(props, { emit }) {
emit('onSubmit')
}
}
新增模板片段 fragment
即 vue3 的模板支持多个根节点
vue2 的模板只能有一个根节点
移除数据双向绑定修饰符 .sync,改用 v-model:
vue2 的 .sync 功能可参考博客
https://blog.csdn.net/weixin_41192489/article/details/117360598
vue3 的 v-model 功能可参考博客
https://blog.csdn.net/weixin_41192489/article/details/137880927
改用 defineAsyncComponent 导入异步组
<script>
import { defineAsyncComponent } from 'vue'
export default {
components: {
AdminPage: defineAsyncComponent(() =>
import('./components/AdminPageComponent.vue')
)
}
}
</script>
<template>
<AdminPage />
</template>
原 vue2 的写法为
<script>
export default {
components: {
AdminPage: () => import('./components/AdminPageComponent.vue')
}
}
</script>
<template>
<AdminPage />
</template>
移除 filter
vue2 中 filter 常用于格式化数据,如
{{ '2018-05-25T14:06:51.618Z' | datefmt }}
filters: {
// input是自定义过滤器的默认参数,input的值永远都是取自于 | 左边的内容
datefmt: function (input) {
// 定义过滤器的内容:将input的值格式化成 yyyy-MM-dd 字符串输出
input = new Date(input)
let res;
let year = input.getFullYear();
let month = input.getMonth() + 1;
let day = input.getDate();
res = year + '-' + month + '-' + day;
return res;
}
},
页面显示效果
2018-5-25
新增内置组件 Teleport
用于将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去,常用于模态框的开发。
<button @click="open = true">Open Modal</button>
<!-- 将模态框挂载到 body 标签上渲染,以便避免简化 css 样式,同时避免祖先组件样式的干扰 -->
<Teleport to="body">
<div v-if="open" class="modal">
<p>Hello from the modal!</p>
<button @click="open = false">Close</button>
</div>
</Teleport>
更多详情见官网
新增内置组件 Suspense
[实验性功能] 用于展示异步组件的状态,常和 <Transition>
、<KeepAlive>
等组件结合使用
<RouterView v-slot="{ Component }">
<template v-if="Component">
<Transition mode="out-in">
<KeepAlive>
<Suspense>
<!-- 主要内容 -->
<component :is="Component"></component>
<!-- 加载中状态 -->
<template #fallback>
正在加载...
</template>
</Suspense>
</KeepAlive>
</Transition>
</template>
</RouterView>
更多详情见官网
新增 Composition API (组合式 API)
响应式状态声明 ref, reactive
https://blog.csdn.net/weixin_41192489/article/details/138234529
readonly
创建只读代理
- 可访问,不能修改
- 源改变时,只读代理也会同步改变
const original = reactive({ count: 0 })
const copy = readonly(original)
watchEffect(() => {
// 用来做响应性追踪
console.log(copy.count)
})
// 更改源属性会触发其依赖的侦听器
original.count++
// 更改该只读副本将会失败,并会得到一个警告
copy.count++ // warning!
watch和watchEffect
https://blog.csdn.net/weixin_41192489/article/details/137930356
setup
组合式 API 的入口
https://cn.vuejs.org/api/composition-api-setup.html#composition-api-setup
生命周期钩子
https://blog.csdn.net/weixin_41192489/article/details/137813685