vue3 新特性--其他


1. 全局 API 转移

  • vue3 中将全局 API,即 Vue.xxx 调整到应用实例 app 上
2.x 全局 API(Vue) 3.x 实例 API (app)
Vue.config.xxxx app.config.xxxx
Vue.config.productionTip 移除
Vue.component app.component
Vue.directive app.directive
Vue.mixin app.mixin
Vue.use app.use
Vue.prototype app.config.globalProperties

2. 自定义指令

vue2 自定义指令钩子:

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。
  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。

vue2和vue3自定义指令钩子对比:
vue2和vue3自定义指令钩子对比

// vue2 注册一个全局自定义指令 v-focus
Vue.directive('focus', { 
    // 当被绑定的元素插入到 DOM 中时
    inserted: function (el) { 
        // 聚焦元素 
        el.focus() 
    } 
})

// vue3 注册一个全局自定义指令 v-focus
const { createApp } from "vue"
const app = createApp({}) 
app.directive('focus', { 
    mounted(el) { 
        el.focus()
    } 
})

3. 异步组件

Vue3 中 使用 defineAsyncComponent 定义异步组件,配置选项 component 替换为 loader,loader 函数本身不再接收 resolve 和 reject 参数,且必须返回一个 Promise,用法如下: