日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Vue3值得注意的新特性之——觸發(fā)組件選項

事件名

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

 
 
 
 
  1.   
  2. this.$emit('myEvent') 

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

定義自定義事件

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

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

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

驗證拋出的事件

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

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

 
 
 
 
  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傳遞參數(shù)來修改這些名稱:

 
 
 
 
  1.  

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

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

多個v-model綁定

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

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

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

處理v-model修飾詞

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

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

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

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

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

現(xiàn)在我們已經(jīng)設(shè)置了 prop,我們可以檢查 modelModifiers 對象鍵并編寫一個處理器來更改發(fā)出的值。在下面的代碼中,每當 元素觸發(fā) input 事件時,我們都將字符串大寫。

 
 
 
 
  1.  
  2.    
  3.   {{ myText }} 
 
  •  
  • const app = Vue.createApp({ 
  •   data() { 
  •     return { 
  •       myText: '' 
  •     } 
  •   } 
  • }) 
  •  
  • app.component('my-component', { 
  •   props: { 
  •     modelValue: String, 
  •     modelModifiers: { 
  •       default: () => ({}) 
  •     } 
  •   }, 
  •   emits: ['update:modelValue'], 
  •   methods: { 
  •     emitValue(e) { 
  •       let value = e.target.value 
  •       if (this.modelModifiers.capitalize) { 
  •         value = value.charAt(0).toUpperCase() + value.slice(1) 
  •       } 
  •       this.$emit('update:modelValue', value) 
  •     } 
  •   }, 
  •   template: `
  •     type="text" 
  •     :value="modelValue" 
  •     @input="emitValue">` 
  • }) 
  •  
  • app.mount('#app') 
  • 對于帶參數(shù)的 v-model 綁定,生成的 prop 名稱將為 arg + "Modifiers":

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

    名稱欄目:Vue3值得注意的新特性之——觸發(fā)組件選項
    轉(zhuǎn)載來源:http://www.5511xx.com/article/cdsopis.html