成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3值得注意的新特性之——觸發組件選項

開發 前端
與組件和prop一樣,事件名提供了自動的大小寫轉換。如果用駝峰命名的子組件中觸發一個事件,你將可以在父組件中添加一個kebabcase(短橫線分割命名)的監聽器。

事件名

與組件和prop一樣,事件名提供了自動的大小寫轉換。如果用駝峰命名的子組件中觸發一個事件,你將可以在父組件中添加一個kebabcase(短橫線分割命名)的監聽器。

  1. <my-component @my-event="doSomething"></my-component>  
  2. this.$emit('myEvent'

與props命名一樣,當你使用DOM模板時,我們建議使用kebabcase事件監聽器。如果你使用的是字符串模板,這個限制就不適用。

定義自定義事件

可以通過emits選項在組件上定義已發出的事件。 

  1. app.component('custom-form', { 
  2.   emits: ['inFocus''submit'
  3. }) 

當在emits選項中定義了原生事件(如click)時,將使用組件中的事件替代原生事件偵聽器。

驗證拋出的事件

與props類型驗證類似,如果使用對象語法而不是數組語法,則可以驗證它。

要添加驗證,將為事件分配一個函數,該函數接收傳遞給$emit調用的參數,并返回一個布爾值以指示事件是否有效。 

  1. app.component('custom-form', { 
  2.   emits: { 
  3.     // 沒有驗證 
  4.     click: null
  5.  
  6.     // 驗證submit 事件 
  7.     submit: ({ email, password }) => { 
  8.       if (email && password) { 
  9.         return true 
  10.       } else { 
  11.         console.warn('Invalid submit event payload!'
  12.         return false 
  13.       } 
  14.     } 
  15.   }, 
  16.   methods: { 
  17.     submitForm() { 
  18.       this.$emit('submit', { email, password }) 
  19.     } 
  20.   } 
  21. }) 

v-model事件

默認情況下,組件上的v-model使用modelValue作為props和update:modelValue做完事件。我們可以通過向v-model傳遞參數來修改這些名稱:

  1. <my-component v-model:title="bookTitle"></my-component> 

在本例中,子組件將需要一個 title prop 并發出 update:title 要同步的事件: 

  1. app.component('my-component', { 
  2.   props: { 
  3.     title: String 
  4.   }, 
  5.   emits: ['update:title'], 
  6.   template: ` 
  7.     <input 
  8.       type="text" 
  9.       :value="title" 
  10.       @input="$emit('update:title', $event.target.value)"
  11.   ` 
  12. }) 

多個v-model綁定

通過利用特定prop和事件為目標的能力,正如我們之前在v-model參數中所學的那樣,我們現在可以在單個組件實例上創建多個v-model綁定。

每個v-model將同步到不同的prop,而不需要在組件中添加額外的選項。 

  1. <user-name 
  2.   v-model:first-name="firstName" 
  3.   v-model:last-name="lastName" 
  4. ></user-name
  5.  
  6. app.component('user-name', { 
  7.   props: { 
  8.     firstName: String, 
  9.     lastName: String 
  10.   }, 
  11.   emits: ['update:firstName''update:lastName'], 
  12.   template: ` 
  13.     <input  
  14.       type="text" 
  15.       :value="firstName" 
  16.       @input="$emit('update:firstName', $event.target.value)"
  17.  
  18.     <input 
  19.       type="text" 
  20.       :value="lastName" 
  21.       @input="$emit('update:lastName', $event.target.value)"
  22.   ` 
  23. }) 

處理v-model修飾詞

在2.X中,我們對組件v-model上的.trim等修飾符提供了硬編碼支持。但是,如果組件可以支持自定義修飾符,則會更有用。

在3.X中,添加到組件v-model的修飾符將通過modelModifiers prop提供給組件。

v-model有內置的修飾符——.trim,.number和.lazy。但是,在某些情況下,你可能還需要添加自己的自定義修飾符。

我們做個實例:將提供的字符串第一個字母大寫。 

  1. <my-component v-model.capitalize="myText"></my-component> 
  2.  
  3. app.component('my-component', { 
  4.   props: { 
  5.     modelValue: String, 
  6.     modelModifiers: { 
  7.       default: () => ({}) 
  8.     } 
  9.   }, 
  10.   emits: ['update:modelValue'], 
  11.   template: ` 
  12.     <input type="text" 
  13.       :value="modelValue" 
  14.       @input="$emit('update:modelValue', $event.target.value)"
  15.   `, 
  16.   created() { 
  17.     console.log(this.modelModifiers) // { capitalize: true } 
  18.   } 
  19. }) 

現在我們已經設置了 prop,我們可以檢查 modelModifiers 對象鍵并編寫一個處理器來更改發出的值。在下面的代碼中,每當<input/> 元素觸發 input 事件時,我們都將字符串大寫。

  1. <div id="app"
  2.   <my-component v-model.capitalize="myText"></my-component> 
  3.   {{ myText }} 
  4. </div> 
  5.  
  6. const app = Vue.createApp({ 
  7.   data() { 
  8.     return { 
  9.       myText: '' 
  10.     } 
  11.   } 
  12. }) 
  13.  
  14. app.component('my-component', { 
  15.   props: { 
  16.     modelValue: String, 
  17.     modelModifiers: { 
  18.       default: () => ({}) 
  19.     } 
  20.   }, 
  21.   emits: ['update:modelValue'], 
  22.   methods: { 
  23.     emitValue(e) { 
  24.       let value = e.target.value 
  25.       if (this.modelModifiers.capitalize) { 
  26.         value = value.charAt(0).toUpperCase() + value.slice(1) 
  27.       } 
  28.       this.$emit('update:modelValue', value) 
  29.     } 
  30.   }, 
  31.   template: `<input 
  32.     type="text" 
  33.     :value="modelValue" 
  34.     @input="emitValue">` 
  35. }) 
  36.  
  37. app.mount('#app'

對于帶參數的 v-model 綁定,生成的 prop 名稱將為 arg + "Modifiers": 

  1. <my-component v-model:description.capitalize="myText"></my-component> 
  2.  
  3. app.component('my-component', { 
  4.   props: ['description''descriptionModifiers'], 
  5.   emits: ['update:description'], 
  6.   template: ` 
  7.     <input type="text" 
  8.       :value="description" 
  9.       @input="$emit('update:description', $event.target.value)"
  10.   `, 
  11.   created() { 
  12.     console.log(this.descriptionModifiers) // { capitalize: true } 
  13.   } 
  14. }) 

 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2021-05-12 10:25:29

開發技能代碼

2015-06-23 15:48:41

Swift 2.0iOS9

2010-07-21 16:28:33

職場

2022-07-14 08:22:48

Computedvue3

2013-09-16 13:18:28

遺留系統系統遷移

2010-11-26 15:05:58

MySQL變量

2021-12-31 07:48:58

Vue3 插件Vue應用

2015-10-08 09:25:05

比特幣存儲開源

2010-03-31 15:52:24

Oracle子查詢

2011-05-12 09:29:54

2017-02-21 13:20:02

SD-WAN軟件定義網絡廣域網

2009-06-15 14:53:00

NetBeans 6.

2021-08-11 08:31:42

前端技術Vue3

2023-03-15 18:25:25

2025-04-17 08:00:48

2019-07-19 10:08:49

iOS應用系統

2025-04-14 08:06:04

2025-04-25 08:01:12

Go應用程序部署

2025-04-15 08:00:53

2025-04-18 08:07:12

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美福利视频 | 视频在线一区二区 | 欧美爱爱视频 | 日韩不卡视频在线 | 国产精品久久久久久久久久久免费看 | 91精品国产乱码久久久 | 中国一级特黄真人毛片 | 久久久久国 | 亚洲精品日韩精品 | 亚洲va在线va天堂va狼色在线 | 久久精品一级 | 黑人精品 | 国产sm主人调教女m视频 | 日韩成人影院在线观看 | 精品国产高清一区二区三区 | 精品日韩欧美一区二区 | 欧美日韩国产一区二区三区 | 国产精品久久精品 | 日韩成人在线一区 | 婷婷在线视频 | 成人国产精品入口免费视频 | 欧美一级高潮片免费的 | 中文字幕日韩一区 | 伦理二区| 亚洲高清成人在线 | 色屁屁在线观看 | 久草在线免费资源 | 欧美精品久久久 | 久久久123| 亚洲国产高清高潮精品美女 | 精品国产伦一区二区三区观看说明 | 久久久久久久亚洲精品 | 黄色网页在线 | 欧美videosex性极品hd | 99pao成人国产永久免费视频 | 97福利在线 | 成人精品久久久 | 精品久久久久一区二区国产 | 4h影视| 国产成人精品免费视频大全最热 | 天天久久 |