Vue 3.0 應(yīng)用API

2021-07-16 11:26 更新

在 Vue 3 中,改變?nèi)?Vue 行為的 API 現(xiàn)在被移動(dòng)到了由新的 createApp 方法所創(chuàng)建的應(yīng)用實(shí)例上。此外,現(xiàn)在它們的影響僅限于該特定應(yīng)用實(shí)例:

  1. import { createApp } from 'vue'
  2. const app = createApp({})

調(diào)用 createApp 返回一個(gè)應(yīng)用實(shí)例。該實(shí)例提供了一個(gè)應(yīng)用上下文。應(yīng)用實(shí)例掛載的整個(gè)組件樹(shù)共享相同的上下文,該上下文提供了之前在 Vue 2.x 中“全局”的配置。

另外,由于 createApp 方法返回應(yīng)用實(shí)例本身,因此可以在其后鏈?zhǔn)秸{(diào)用其它方法,這些方法可以在以下部分中找到。

#component

  • 參數(shù):

  • {string} name
  • {Function | Object} [definition]

  • 返回值:

  • 如果傳入 definition 參數(shù),返回應(yīng)用實(shí)例。
  • 如果不傳入 definition 參數(shù),返回組件定義。

  • 用法:

注冊(cè)或檢索全局組件。注冊(cè)還會(huì)使用給定的 name 參數(shù)自動(dòng)設(shè)置組件的 name。

  • 示例:

  1. import { createApp } from 'vue'
  2. const app = createApp({})
  3. // 注冊(cè)一個(gè)名為my-component的組件
  4. app.component('my-component', {
  5. /* ... */
  6. })
  7. // 檢索注冊(cè)的組件(始終返回構(gòu)造函數(shù))
  8. const MyComponent = app.component('my-component', {})

#config

  • 用法:

包含應(yīng)用配置的對(duì)象。

  • 示例:

  1. import { createApp } from 'vue'
  2. const app = createApp({})
  3. app.config = {...}

#directive

  • 參數(shù):

  • {string} name
  • {Function | Object} [definition]

  • 返回值:

  • 如果傳入 definition 參數(shù),返回應(yīng)用實(shí)例。
  • 如果不傳入 definition 參數(shù),返回指令定義。

  • 用法:

注冊(cè)或檢索全局指令。

  • 示例:

  1. import { createApp } from 'vue'
  2. const app = createApp({})
  3. // 注冊(cè)
  4. app.directive('my-directive', {
  5. // 指令是具有一組生命周期的鉤子:
  6. // 在綁定元素的父組件掛載之前調(diào)用
  7. beforeMount() {},
  8. // 綁定元素的父組件掛載時(shí)調(diào)用
  9. mounted() {},
  10. // 在包含組件的 VNode 更新之前調(diào)用
  11. beforeUpdate() {},
  12. // 在包含組件的 VNode 及其子組件的 VNode 更新之后調(diào)用
  13. updated() {},
  14. // 在綁定元素的父組件卸載之前調(diào)用
  15. beforeUnmount() {},
  16. // 卸載綁定元素的父組件時(shí)調(diào)用
  17. unmounted() {}
  18. })
  19. // 注冊(cè) (功能指令)
  20. app.directive('my-directive', () => {
  21. // 這將被作為 `mounted` 和 `updated` 調(diào)用
  22. })
  23. // getter, 如果已注冊(cè),則返回指令定義
  24. const myDirective = app.directive('my-directive')

指令鉤子傳遞了這些參數(shù):

#el

指令綁定到的元素。這可用于直接操作 DOM。

#binding

包含以下 property 的對(duì)象。

  • instance:使用指令的組件實(shí)例。
  • value:傳遞給指令的值。例如,在 v-my-directive="1 + 1" 中,該值為 2。
  • oldValue:先前的值,僅在 beforeUpdateupdated 中可用。值是否已更改都可用。
  • arg:參數(shù)傳遞給指令 (如果有)。例如在 v-my-directive:foo 中,arg 為 "foo"。
  • modifiers:包含修飾符 (如果有) 的對(duì)象。例如在 v-my-directive.foo.bar 中,修飾符對(duì)象為 {foo: true,bar: true}。
  • dir:一個(gè)對(duì)象,在注冊(cè)指令時(shí)作為參數(shù)傳遞。例如,在以下指令中

  1. app.directive('focus', {
  2. mounted(el) {
  3. el.focus()
  4. }
  5. })

dir 將會(huì)是以下對(duì)象:

  1. {
  2. mounted(el) {
  3. el.focus()
  4. }
  5. }

#vnode

上面作為 el 參數(shù)收到的真實(shí) DOM 元素的藍(lán)圖。

#prevNode

上一個(gè)虛擬節(jié)點(diǎn),僅在 beforeUpdateupdated 鉤子中可用。

Note

除了 el 之外,你應(yīng)該將這些參數(shù)視為只讀,并且永遠(yuǎn)不要修改它們。如果你需要跨鉤子共享信息,建議通過(guò)元素的自定義數(shù)據(jù)屬性集進(jìn)行共享。

#mixin

  • 參數(shù):

  • {Object} mixin

  • 返回值:

  • 應(yīng)用實(shí)例

  • 用法:

在整個(gè)應(yīng)用范圍內(nèi)應(yīng)用混入。一旦注冊(cè),它們就可以在當(dāng)前的應(yīng)用中任何組件模板內(nèi)使用它。插件作者可以使用此方法將自定義行為注入組件。不建議在應(yīng)用代碼中使用。

#mount

  • 參數(shù):

  • {Element | string} rootContainer
  • {boolean} isHydrate

  • 返回值:

  • 根組件實(shí)例

  • 用法:

將應(yīng)用實(shí)例的根組件掛載在提供的 DOM 元素上。

  • 示例:

  1. <body>
  2. <div id="my-app"></div>
  3. </body>

  1. import { createApp } from 'vue'
  2. const app = createApp({})
  3. // 做一些必要的準(zhǔn)備
  4. app.mount('#my-app')

#provide

  • 參數(shù):

  • {string | Symbol} key
  • value

  • 返回值:

  • 應(yīng)用實(shí)例

  • 用法:

設(shè)置一個(gè)可以被注入到應(yīng)用范圍內(nèi)所有組件中的值。組件應(yīng)該使用 inject 來(lái)接收提供的值。

provide/inject 的角度來(lái)看,可以將應(yīng)用程序視為根級(jí)別的祖先,而根組件是其唯一的子級(jí)。

該方法不應(yīng)該與 provide 組件選項(xiàng)或組合式 API 中的 provide 方法混淆。雖然它們也是相同的 provide/inject 機(jī)制的一部分,但是是用來(lái)配置組件提供的值而不是應(yīng)用提供的值。

通過(guò)應(yīng)用提供值在寫(xiě)插件時(shí)尤其有用,因?yàn)椴寮话悴荒苁褂媒M件提供值。這是使用 globalProperties 的替代選擇。

Note

provideinject 綁定不是響應(yīng)式的。這是有意為之。不過(guò),如果你向下傳遞一個(gè)響應(yīng)式對(duì)象,這個(gè)對(duì)象上的 property 會(huì)保持響應(yīng)式。

  • 示例:

向根組件中注入一個(gè) property,值由應(yīng)用提供。

  1. import { createApp } from 'vue'
  2. const app = createApp({
  3. inject: ['user'],
  4. template: `
  5. <div>
  6. {{ user }}
  7. </div>
  8. `
  9. })
  10. app.provide('user', 'administrator')

#unmount

  • 參數(shù):

  • {Element | string} rootContainer

  • 用法:

在提供的 DOM 元素上卸載應(yīng)用實(shí)例的根組件。

  • 示例:

  1. <body>
  2. <div id="my-app"></div>
  3. </body>

  1. import { createApp } from 'vue'
  2. const app = createApp({})
  3. // 做一些必要的準(zhǔn)備
  4. app.mount('#my-app')
  5. // 掛載5秒后,應(yīng)用將被卸載
  6. setTimeout(() => app.unmount('#my-app'), 5000)

#use

  • 參數(shù):

  • {Object | Function} plugin
  • ...options (可選)

  • 返回值:

  • 應(yīng)用實(shí)例

  • 用法:

安裝 Vue.js 插件。如果插件是一個(gè)對(duì)象,它必須暴露一個(gè) install 方法。如果它本身是一個(gè)函數(shù),它將被視為安裝方法。

該安裝方法將以應(yīng)用實(shí)例作為第一個(gè)參數(shù)被調(diào)用。傳給 use 的其他 options 參數(shù)將作為后續(xù)參數(shù)傳入該安裝方法。

當(dāng)在同一個(gè)插件上多次調(diào)用此方法時(shí),該插件將僅安裝一次。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)