最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue父組件監(jiān)聽(tīng)子組件數(shù)據(jù)更新方式(hook)

 更新時(shí)間:2022年08月01日 08:44:58   作者:Mao_mou  
這篇文章主要介紹了vue父組件監(jiān)聽(tīng)子組件數(shù)據(jù)更新方式(hook),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue父組件監(jiān)聽(tīng)子組件數(shù)據(jù)更新

this.$on(‘hook : 生命周期鉤子’, () => {})

可以監(jiān)聽(tīng)執(zhí)行生命周期鉤子,適用場(chǎng)合如:

data(){
?? ?return {
?? ??? ?itemID:'',
?? ?}
}
mounted(){
?? ?// 設(shè)置定時(shí)器
?? ?this.itemID = setInterval(()=> { console.log('開(kāi)計(jì)時(shí)器') }, 1000);
?? ?// 離開(kāi)頁(yè)面時(shí)清除定時(shí)器
?? ?this.$once('hook:beforeDestroy', ()=> { clearInterval(this.itemID) })
}

將定時(shí)器和清除定時(shí)器放在一起,功能和寫(xiě)在beforeDestroy生命周期中是一樣滴,這樣維護(hù)起來(lái)比較方便 ~

定時(shí)器里放需要定時(shí)請(qǐng)求的數(shù)據(jù),然后離開(kāi)頁(yè)面就清除定時(shí)器,也就停止請(qǐng)求

@hook:生命周期鉤子=“觸發(fā)的函數(shù)”

父組件監(jiān)聽(tīng)子組件數(shù)據(jù)更新,也就是監(jiān)聽(tīng)生命周期 ~

來(lái)人! 上代碼 !

// 父組件
<template>
?? ?<div class="father">
?? ??? ?<son @hook:update="sonUpdateFun"/> ?// 我是子組件
?? ?</div>
</template>
<script>
?? ?import son from './son.vue'
?? ?export default {
?? ??? ?components:{ 'son' },
?? ??? ?methods:{
?? ??? ??? ?sonUpdateFun(){
?? ??? ??? ??? ?console.log("子組件的數(shù)據(jù)更新啦~~~")
?? ??? ??? ?}
?? ??? ?}
?? ?}
</script>

當(dāng)子組件的數(shù)據(jù)更新的時(shí)候就會(huì)觸發(fā)函數(shù) sonUpdateFun,就可以進(jìn)行一些不可描述的操作了 

監(jiān)聽(tīng)子組件內(nèi)數(shù)據(jù)變化,父組件綁定change事件

如題,做了一個(gè)分頁(yè)功能,element里面的分頁(yè),已經(jīng)有了頁(yè)碼改變、每頁(yè)數(shù)量改變的change事件,這樣如果當(dāng)頁(yè)碼改變、每頁(yè)數(shù)量改變的時(shí)候,又要在methods里面寫(xiě)change來(lái)根據(jù)改變的值來(lái)獲取分頁(yè),這樣就很麻煩,如果沒(méi)個(gè)頁(yè)面都有分頁(yè),這樣就要在methods里面多寫(xiě)change事件。

想到了一個(gè)解決方法,就是把element的分頁(yè)封裝成一個(gè)組件,具體思路如下:

子組件

1.這個(gè)綁定了每頁(yè)數(shù)量改變的事件,

handleSizeChange
handleSizeChange(index) {
      this.query.length = index
    },

2.這個(gè)綁定了當(dāng)前頁(yè)碼改變的事件

handleCurrentChange
handleCurrentChange(index) {
      console.log(index)
      this.query.start = index
    }

3.最重要的數(shù)據(jù),這里是當(dāng)前頁(yè)碼和每頁(yè)數(shù)量,

query: {
        start: 1,
        length: 10
      }

4.頁(yè)碼跟數(shù)量改變是在子組件中完成的,寫(xiě)個(gè)watch,然后實(shí)時(shí)把query傳遞給父組件

watch: {
    query: {
      handler(val, oldVal) {
        this.$emit('changeData', this.query)
      },
      deep: true
    }
  },

5.完整子組件代碼

<template>
    <div>
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page.sync="query.start"
        :page-sizes="[10, 20, 30, 50]"
        :page-size="query.length"
        layout="sizes, prev, pager, next"
        :total="total">
      </el-pagination>
    </div>
</template>
<script>
export default {
  name: 'pagination',
  props: {
    size: {
      type: Number,
      default: function() {
        return 10
      }
    },
    total: {
      type: Number,
      default: function() {
        return 10
      }
    },
    start: {
      type: Number,
      default: function() {
        return 1
      }
    }
  },
  created() {
    this.query = {
      start: this.start,
      length: this.size
    }
  },
  data() {
    return {
      query: {
        start: 1,
        length: 10
      }
    }
  },
  watch: {
    query: {
      handler(val, oldVal) {
        this.$emit('changeData', this.query)
      },
      deep: true
    }
  },
  methods: {
    handleSizeChange(index) {
      this.query.length = index
    },
    handleCurrentChange(index) {
      console.log(index)
      this.query.start = index
    }
  }
}
</script>
<style scoped>
</style>

父組件

1.先引入組件,組件位置根據(jù)自己的而定

import pagination from '../../components/table-pagination/pagination'

2.然后注冊(cè)組件

components: { pagination },

3.使用組件

<pagination
          :size="query.length"
          :total="total"
          :start="query.start"
          @changeData="getList($event)"
          />

組件傳遞的參數(shù):

4.如何獲取子組件傳遞過(guò)來(lái)的query對(duì)象?

1)父組件獲取

注意:

這里的changeData跟子組件中$emit發(fā)送的地方要相同!

2)子組件部位

注意:this.$emit('changeData',this.query)

changeData就是父組件中子組件部位注冊(cè)的自定義事件,this.query就是要傳遞的值

3)我的獲取分頁(yè)的函數(shù)就是getList(query),直接在自定義事件中寫(xiě)@changeData="getList($event)"

大功告成

這樣每當(dāng)子組件中query的值改變之后,父組件都會(huì)執(zhí)行分頁(yè)查詢請(qǐng)求,就可以實(shí)時(shí)更新了!

后記:自定義事件,可以做很多事情,比如,點(diǎn)擊子組件按鈕,傳遞參數(shù),然后父組件使用這個(gè)參數(shù)來(lái)做什么事情,當(dāng)整個(gè)頁(yè)面的數(shù)據(jù)量、邏輯實(shí)在是太龐大的時(shí)候,就可以把整個(gè)也面分成一個(gè)個(gè)小組件來(lái),這樣就不會(huì)顯得頁(yè)面龐大復(fù)雜了…

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue中Vue-Baidu-Map基本使用方法實(shí)例

    Vue中Vue-Baidu-Map基本使用方法實(shí)例

    最近有一個(gè)項(xiàng)目需要用到地圖來(lái)展示位置并進(jìn)行數(shù)據(jù)交互,用vue-baidu-map實(shí)現(xiàn)出來(lái),下面這篇文章主要給大家介紹了關(guān)于Vue中Vue-Baidu-Map基本使用的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 完美解決axios跨域請(qǐng)求出錯(cuò)的問(wèn)題

    完美解決axios跨域請(qǐng)求出錯(cuò)的問(wèn)題

    下面小編就為大家分享一篇完美解決axios跨域請(qǐng)求出錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • vue+element?DatePicker實(shí)現(xiàn)日期選擇器封裝

    vue+element?DatePicker實(shí)現(xiàn)日期選擇器封裝

    Vue?Element?DatePicker是一款基于Vue.js的日期選擇控件,它提供了豐富的日期選擇功能,支持日期范圍選擇、日期格式化、自定義日期格式、快捷選擇等功能,極大地提高了用戶的體驗(yàn),是開(kāi)發(fā)者必備的日期選擇控件。
    2023-02-02
  • Vue基礎(chǔ)學(xué)習(xí)之項(xiàng)目整合及優(yōu)化

    Vue基礎(chǔ)學(xué)習(xí)之項(xiàng)目整合及優(yōu)化

    這篇文章主要給大家介紹了關(guān)于Vue基礎(chǔ)學(xué)習(xí)之項(xiàng)目整合及優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • vue實(shí)現(xiàn)移動(dòng)端table表格簡(jiǎn)單方法

    vue實(shí)現(xiàn)移動(dòng)端table表格簡(jiǎn)單方法

    這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)移動(dòng)端table表格簡(jiǎn)單方法的相關(guān)資料,使用Vue.js開(kāi)發(fā)移動(dòng)應(yīng)用程序時(shí),經(jīng)常需要使用各種UI組件,其中el-table是一個(gè)常用的表格組件,可以方便地展示數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • vue init webpack 建vue項(xiàng)目報(bào)錯(cuò)的解決方法

    vue init webpack 建vue項(xiàng)目報(bào)錯(cuò)的解決方法

    今天小編就為大家分享一篇vue init webpack 建vue項(xiàng)目報(bào)錯(cuò)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue中使用AJAX實(shí)現(xiàn)讀取來(lái)自XML文件的信息

    vue中使用AJAX實(shí)現(xiàn)讀取來(lái)自XML文件的信息

    這篇文章主要為大家詳細(xì)介紹了vue中如何使用AJAX實(shí)現(xiàn)讀取來(lái)自XML文件的信息,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下
    2023-12-12
  • el-form 多層級(jí)表單的實(shí)現(xiàn)示例

    el-form 多層級(jí)表單的實(shí)現(xiàn)示例

    這篇文章主要介紹了el-form 多層級(jí)表單的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 解決Vue?input輸入框卡死的問(wèn)題

    解決Vue?input輸入框卡死的問(wèn)題

    這篇文章主要介紹了解決Vue?input輸入框卡死的問(wèn)題,文中同時(shí)給大家提到了Vue-element中el-input輸入卡頓問(wèn)題及解決方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Vuex報(bào)錯(cuò)之[vuex] unknown mutation type: handlePower問(wèn)題及解決

    Vuex報(bào)錯(cuò)之[vuex] unknown mutation type: han

    這篇文章主要介紹了Vuex報(bào)錯(cuò)之[vuex] unknown mutation type: handlePower問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

图们市| 鹤庆县| 新建县| 吴桥县| 台中市| 鲁山县| 乡城县| 五河县| 图木舒克市| 成安县| 勃利县| 峡江县| 井研县| 洞口县| 师宗县| 岳池县| 个旧市| 龙川县| 肥乡县| 福建省| 城固县| 桃江县| 磐安县| 开原市| 银川市| 福建省| 云安县| 康保县| 富裕县| 大宁县| 小金县| 东乡| 长治市| 井陉县| 尉犁县| 秦安县| 商河县| 塔河县| 白银市| 虞城县| 京山县|