国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3:組件基礎(chǔ)(下)

這篇具有很好參考價(jià)值的文章主要介紹了Vue3:組件基礎(chǔ)(下)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Vue3:組件基礎(chǔ)(下)

Date: April 12, 2023
Sum: props驗(yàn)證、計(jì)算屬性、自定義時(shí)間、組件上的v-model、任務(wù)列表案例


目標(biāo):

能夠知道如何對(duì) props 進(jìn)行驗(yàn)證

能夠知道如何使用計(jì)算屬性

令能夠知道如何為組件自定義事件

令能夠知道如何在組件上使用 v-model




props 驗(yàn)證

  1. 什么是 props 驗(yàn)證

指的是:在封裝組件時(shí)對(duì)外界傳遞過來的 props 數(shù)據(jù)進(jìn)行合法性的校驗(yàn),從而防止數(shù)據(jù)不合法的問題。

Vue3:組件基礎(chǔ)(下)

使用數(shù)組類型的 props 節(jié)點(diǎn)的缺點(diǎn):無法為每個(gè) prop 指定具體的數(shù)據(jù)類型。

  1. 對(duì)象類型的 props 節(jié)點(diǎn)

使用對(duì)象類型的 props 節(jié)點(diǎn),可以對(duì)每個(gè) prop 進(jìn)行數(shù)據(jù)類型的校驗(yàn),示意圖如下:

Vue3:組件基礎(chǔ)(下)

  1. props 驗(yàn)證

對(duì)象類型的 props 節(jié)點(diǎn)提供了多種數(shù)據(jù)驗(yàn)證方案,例如:

① 基礎(chǔ)的類型檢查 ② 多個(gè)可能的類型 ③ 必填項(xiàng)校驗(yàn) ④ 屬性默認(rèn)值 ⑤ 自定義驗(yàn)證函數(shù)

3.1 基礎(chǔ)的類型檢查

可以直接為組件的 prop 屬性指定基礎(chǔ)的校驗(yàn)類型,從而防止組件的使用者為其綁定錯(cuò)誤類型的數(shù)據(jù):

Vue3:組件基礎(chǔ)(下)

3.2 多個(gè)可能的類型

如果某個(gè) prop 屬性值的類型不唯一,此時(shí)可以通過數(shù)組的形式,為其指定多個(gè)可能的類型,示例代碼如下:

Vue3:組件基礎(chǔ)(下)

3.3 必填項(xiàng)校驗(yàn)

如果組件的某個(gè) prop 屬性是必填項(xiàng),必須讓組件的使用者為其傳遞屬性的值。此時(shí),可以通過如下的方式將其設(shè)置為必填項(xiàng):

export default {
  name: 'MyCount',
  props: {
    count: {
      type: Number,
      required: true //設(shè)定required
    },
    state: Boolean,
  }
}

3.4 屬性默認(rèn)值

在封裝組件時(shí),可以為某個(gè) prop 屬性指定默認(rèn)值。示例代碼如下:

export default {
  name: 'MyCount',
  props: {
	// 通過“配置對(duì)象”的形式,來定義 propC 屬性的“驗(yàn)證規(guī)則”
    count: {
      type: Number,
      default: 100, // 如果使用者沒有指定 default 的值,則 count 屬性的值默認(rèn)為 100
      required: true 
    },
    state: Boolean,
  }
}

3.5 自定義驗(yàn)證函數(shù)

在封裝組件時(shí),可以為 prop 屬性指定自定義的驗(yàn)證函數(shù),從而對(duì) prop 屬性的值進(jìn)行更加精確的控制:

Vue3:組件基礎(chǔ)(下)




計(jì)算屬性

  1. 什么是計(jì)算屬性

計(jì)算屬性本質(zhì)上就是一個(gè) function 函數(shù),它可以實(shí)時(shí)監(jiān)聽 data 中數(shù)據(jù)的變化,并 return 一個(gè)計(jì)算后的新值,供組件渲染 DOM 時(shí)使用。

  1. 如何聲明計(jì)算屬性

計(jì)算屬性需要以 function 函數(shù)的形式聲明到組件的 computed 選項(xiàng)中,

示例代碼如下:

<template>
  <div>
    <!-- 通過v-model進(jìn)行雙向數(shù)據(jù)綁定。 .number指自動(dòng)將用戶的輸入值轉(zhuǎn)為數(shù)值類型 -->
    <input type="text" v-model.number="count" />
    <p>{{ count }} 乘以2的值為: {{ plus }}</p>
  </div>
</template>

<script>
export default {
  name: 'MyCounter',
  data() {
    return {
      count: 1,
    }
  },
  computed: {
    // 計(jì)算屬性:監(jiān)聽data中count值的變化,自動(dòng)計(jì)算出count*2之后的新值
    plus() {
      return this.count * 2
    }
  }
}
</script>

結(jié)果:

Vue3:組件基礎(chǔ)(下)

注意:計(jì)算屬性側(cè)重于得到一個(gè)計(jì)算的結(jié)果,因此計(jì)算屬性中必須有 return 返回值!

  1. 計(jì)算屬性的使用注意點(diǎn)

① 計(jì)算屬性必須定義在 computed 節(jié)點(diǎn)中

② 計(jì)算屬性必須是一個(gè) function 函數(shù)

③ 計(jì)算屬性必須有返回值

④ 計(jì)算屬性必須當(dāng)做普通屬性使用

比如 {{plus}}, 而非是這樣用:{{plus()}}

  1. 計(jì)算屬性 vs 方法

相對(duì)于方法來說,計(jì)算屬性會(huì)緩存計(jì)算的結(jié)果,只有計(jì)算屬性的依賴項(xiàng)發(fā)生變化時(shí),才會(huì)重新進(jìn)行運(yùn)算。因此計(jì)算屬性的性能更好

案例:

  • Code:

    <template>
      <div>
        <!-- 通過v-model進(jìn)行雙向數(shù)據(jù)綁定。 .number指自動(dòng)將用戶的輸入值轉(zhuǎn)為數(shù)值類型 -->
        <input type="text" v-model.number="count" />
        <p>{{ count }} 乘以2的值為: {{ plus }}</p>
        <p>{{ count }} 乘以2的值為: {{ plus }}</p>
        <p>{{ count }} 乘以2的值為: {{ plus }}</p>
        <hr/>
        <p>{{ count }} 乘以2的值為: {{ m_plus() }}</p>
        <p>{{ count }} 乘以2的值為: {{ m_plus() }}</p>
        <p>{{ count }} 乘以2的值為: {{ m_plus() }}</p>
      </div>
    </template>
    
    <script>
    export default {
      name: 'MyCounter',
      data() {
        return {
          count: 1,
        }
      },
      computed: {
        // 計(jì)算屬性:監(jiān)聽data中count值的變化,自動(dòng)計(jì)算出count*2之后的新值
        plus() {
          console.log("計(jì)算屬性被執(zhí)行了");
          return this.count * 2
        }
      },
      methods: {
        m_plus() {
          console.log("方法被執(zhí)行了");
          return this.count * 2
        }
      }
    }
    </script>
    

    效果:

    Vue3:組件基礎(chǔ)(下)

注意:

計(jì)算屬性的結(jié)果會(huì)被緩存,性能好

方法的計(jì)算結(jié)果無法被緩存,性能低

5. 計(jì)算屬性案例

案例需求,使用計(jì)算屬性動(dòng)態(tài)計(jì)算:

① 已勾選的商品總個(gè)數(shù) ② 已勾選的商品總價(jià) ③ 結(jié)算按鈕的禁用狀態(tài)

Vue3:組件基礎(chǔ)(下)

  • Code:

    computed: {
        //動(dòng)態(tài)計(jì)算出勾選水果的總數(shù)量
        total() {
          let t = 0
          this.fruitlist.forEach(x => {
            if(x.state) {
              t += x.count
            }
          })
          return t
        },
        amount() {
          let a = 0
          this.fruitlist
            .filter(x => x.state)
            .forEach(x => {
              a += x.price * x.count
            })
          return a
        },
        isDisabled() {
          this.total === 0
        }
      },
    

注意:

這里的this指的是當(dāng)前組件實(shí)例

computed: {
	isDisabled() {
		this.toal === 0
	}
}



自定義事件

  1. 什么是自定義事件

在封裝組件時(shí),為了讓組件的使用者可以監(jiān)聽到組件內(nèi)狀態(tài)的變化,此時(shí)需要用到組件的自定義事件

Vue3:組件基礎(chǔ)(下)

注意:這里是在App.vue中監(jiān)聽MyCounter組件中數(shù)據(jù)的變化。

  1. 自定義事件的 3 個(gè)使用步驟

在封裝組件時(shí):

① 聲明自定義事件

② 觸發(fā)自定義事件

在使用組件時(shí):

③ 監(jiān)聽自定義事件

2.1 聲明自定義事件

開發(fā)者為自定義組件封裝的自定義事件,必須事先在 emits 節(jié)點(diǎn)中聲明,示例代碼如下:

Vue3:組件基礎(chǔ)(下)

2.2 觸發(fā)自定義事件

在 emits 節(jié)點(diǎn)下聲明的自定義事件,可以通過 this.$emit(‘自定義事件的名稱’) 方法進(jìn)行觸發(fā),示例代碼如下:

Vue3:組件基礎(chǔ)(下)

2.3 監(jiān)聽自定義事件

在使用自定義的組件時(shí),可以通過 v-on 的形式監(jiān)聽自定義事件。示例代碼如下:

Vue3:組件基礎(chǔ)(下)

3. 自定義事件傳參

在調(diào)用 this.$emit() 方法觸發(fā)自定義事件時(shí),可以通過第 2 個(gè)參數(shù)為自定義事件傳參

示例代碼如下:

//counter.vue
methods: {
  add() {
    this.count++
    this.$emit('countChange',this.count) // 觸發(fā)自定義事件,通過第二個(gè)參數(shù)傳參
  }
}
//App.vue
methods: {
  getCount(val) {
    console.log("觸發(fā)了 countChange 自定義事件", val);
  }
},

理解:在counter組件中的$emit中傳入?yún)?shù),然后在App.vue中的methods中傳入?yún)?shù)接收即可




組件上的 v-model

1. 為什么需要在組件上使用 v-mode

v-model 是雙向數(shù)據(jù)綁定指令,當(dāng)需要維護(hù)組件內(nèi)外數(shù)據(jù)的同步時(shí),可以在組件上使用 v-model 指令。示意圖如下:

Vue3:組件基礎(chǔ)(下)

外界數(shù)據(jù)的變化會(huì)自動(dòng)同步到 counter 組件中 ; counter 組件中數(shù)據(jù)的變化,也會(huì)自動(dòng)同步到外界

理解:父組件和子組件中數(shù)據(jù)的變化會(huì)相互影響

2. 在組件上使用 v-model 的步驟

2.1 父向子傳遞數(shù)據(jù)

Vue3:組件基礎(chǔ)(下)

① 父組件通過 v-bind: 屬性綁定的形式,把數(shù)據(jù)傳遞給子組件
② 子組件中,通過 props 接收父組件傳遞過來的數(shù)據(jù)

案例:

<template>
  <div>
    <h1>App根組件 --- {{ count }}</h1>
    <button @click="count += 1">+1</button>
    <hr/>
    <my-counter :number="count"></my-counter> //通過v-bind屬性將count值傳遞給number
  </div>
</template>

Vue3:組件基礎(chǔ)(下)


2.2 子向父?jìng)鬟f數(shù)據(jù)

Vue3:組件基礎(chǔ)(下)

① 在 v-bind: 指令之前添加 v-model 指令

② 在子組件中聲明 emits 自定義事件,格式為 update:xxx

③ 調(diào)用 $emit() 觸發(fā)自定義事件,更新父組件中的數(shù)據(jù)

案例:

// App.vue
<template>
  <div>
    <h1>App 根組件  ---- {{count}}</h1>
    <button @click="count += 1">+1</button>
    <hr />

    <my-counter v-model:number="count"></my-counter>
  </div>
</template>
// Counter.vue
<template>
  <div>
    <p>count值是:{{number}}</p>
    <button @click="add">+1</button>
  </div>
</template>

<script>
export default {
  name: 'MyCounter',
  props: ['number'],
  emits: ['update:number'],
  methods: {
    add() {
      this.$emit('update:number', this.number + 1)
    }
  }
}
</script>

效果:

子父組件中數(shù)據(jù)同步

Vue3:組件基礎(chǔ)(下)




總結(jié):

① 能夠知道如何對(duì) props 進(jìn)行驗(yàn)證

數(shù)組格式、對(duì)象格式

type、default、required、validator

② 能夠知道如何使用計(jì)算屬性

computed 節(jié)點(diǎn)、必須 return 一個(gè)結(jié)果、緩存計(jì)算結(jié)果

③ 能夠知道如何為組件綁定自定義事件

v-on 綁定自定義事件、emits、$emit()

④ 能夠知道如何在組件上使用 v-model

應(yīng)用場(chǎng)景:實(shí)現(xiàn)組件內(nèi)外的數(shù)據(jù)同步

v-model:props名稱、emits、$emit(‘update:props名稱’)文章來源地址http://www.zghlxwxcb.cn/news/detail-458922.html

到了這里,關(guān)于Vue3:組件基礎(chǔ)(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue3實(shí)現(xiàn)父組件向子組件傳值并監(jiān)聽props改變觸發(fā)事件

    1. 父組件 向子組件 loginPhone 傳遞 tel 參數(shù)? phone 是在 reactive 定義的變量也可是是 ref 定義的變量 2. 子組件

    2024年02月05日
    瀏覽(33)
  • vue3組合式api <script setup> props 父子組件的寫法

    父組件傳入子組個(gè)的變量, 子組件是無法直接修改的, 只能通過 emit的方式, 讓父組件修改, 之后子組件更新 父組件的寫法沒有變, 子組件的寫法就有很大的變化了

    2024年02月10日
    瀏覽(26)
  • Vue.js組件精講 第2章 基礎(chǔ):Vue.js組件的三個(gè)API:prop、event、slot

    Vue.js組件精講 第2章 基礎(chǔ):Vue.js組件的三個(gè)API:prop、event、slot

    如果您已經(jīng)對(duì) Vue.js 組件的基礎(chǔ)用法了如指掌,可以跳過本小節(jié),不過當(dāng)做復(fù)習(xí)稍讀一下也無妨。 一個(gè)再?gòu)?fù)雜的組件,都是由三部分組成的:prop、event、slot,它們構(gòu)成了 Vue.js 組件的 API。如果你開發(fā)的是一個(gè)通用組件,那一定要事先設(shè)計(jì)好這三部分,因?yàn)榻M件一旦發(fā)布,后面

    2024年04月16日
    瀏覽(66)
  • vue3中運(yùn)用組件寫成獲取驗(yàn)證碼,并實(shí)現(xiàn)手機(jī)可以接收到驗(yàn)證碼事例

    目錄 1. 準(zhǔn)備工作 2. 編寫 Vue3 組件 3. 結(jié)論 當(dāng)我們?cè)陂_發(fā) Web 應(yīng)用時(shí),經(jīng)常會(huì)遇到需要獲取手機(jī)驗(yàn)證碼的情況。本文將介紹如何利用 Vue3 組件來實(shí)現(xiàn)獲取驗(yàn)證碼,并讓用戶的手機(jī)接收到驗(yàn)證碼的功能。 首先,我們需要一個(gè)第三方短信平臺(tái)來發(fā)送短信驗(yàn)證碼。這里我們使用阿里云

    2024年02月14日
    瀏覽(40)
  • Vue3:組件基礎(chǔ)(下)

    Vue3:組件基礎(chǔ)(下)

    Date: April 12, 2023 Sum: props驗(yàn)證、計(jì)算屬性、自定義時(shí)間、組件上的v-model、任務(wù)列表案例 能夠知道如何對(duì) props 進(jìn)行驗(yàn)證 能夠知道如何使用計(jì)算屬性 令能夠知道如何為組件自定義事件 令能夠知道如何在組件上使用 v-model 什么是 props 驗(yàn)證 指的是:在封裝組件時(shí)對(duì)外界傳遞過來的

    2024年02月06日
    瀏覽(19)
  • vue3基礎(chǔ): 組件注冊(cè)

    組件注冊(cè) 一個(gè) Vue 組件在使用前需要先被“注冊(cè)”,這樣 Vue 才能在渲染模板時(shí)找到其對(duì)應(yīng)的實(shí)現(xiàn)。組件注冊(cè)有兩種方式:全局注冊(cè)和局部注冊(cè)。 全局注冊(cè) 我們可以使用 Vue 應(yīng)用實(shí)例的.component()方法,讓組件在當(dāng)前 Vue 應(yīng)用中全局可用。 全局注冊(cè)的問題: 全局注冊(cè),但并沒有

    2024年02月02日
    瀏覽(18)
  • Vue3 - props

    Vue3 - props

    props 用于接收父組件傳遞的值 在使用 script setup 的單文件組件中,props 可以使用 defineProps() 宏來聲明: 在沒有使用 script setup 的組件中,prop 可以使用 props 選項(xiàng)來聲明(和vue2一致): 傳遞給 defineProps() 的參數(shù)和提供給 props 選項(xiàng)的值是相同的,兩種聲明方式背后其實(shí)使用的都

    2024年02月05日
    瀏覽(19)
  • vue3中的Props

    一個(gè)組件需要顯示聲明它所接受的props,這樣vue才能知道外部傳入的哪些是props,哪些是透?jìng)鱝ttribute 在使 script setup 的單文件中,props可以使用 ==defineProps()==宏來聲明: 在沒有使用 script setup 的組件中,prop可以使用props選項(xiàng)來聲明: 注意傳遞給 defineProps 的參數(shù)和提供給props選項(xiàng)

    2024年02月08日
    瀏覽(20)
  • 【vue3】vue3接收props以及emit的用法

    技術(shù) :vue3.2.40 UI框架 :arco-design 2.44.7 css技術(shù) :less 4.1.3 實(shí)現(xiàn) :子組件接收props以及通過emit方法傳值父組件 vue3使用的組合式API,我這里使用的是defineComponent 1.setup里如果需要接收props和使用emit,只需要帶參數(shù) setup(props, { emit }) 2.setup里面只需要帶emit(‘handleCancel’),不需要帶

    2024年02月15日
    瀏覽(25)
  • 【vue3 之 emits & $emit() 講解 】監(jiān)聽子組件事件、emit事件驗(yàn)證、options寫法、composition setup寫法

    前言:不懂在父組件里對(duì)子組件 @xxxx 聲明自定義事件,就不用看本篇文章了。本篇對(duì)此內(nèi)容不做任何說明。這是與 emits 結(jié)合使用的必備知識(shí)! 場(chǎng)景說明: 組件功能封裝: ????????組件封裝了一系列 emit?事件,并返回?cái)?shù)據(jù)、回調(diào)函數(shù)等,或單純執(zhí)行某個(gè)操作后,觸發(fā)父組

    2023年04月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包