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

vue3.0手動封裝分頁組件的方法

 更新時間:2021年09月26日 11:25:55   作者:勇敢牛牛,沖沖沖  
這篇文章主要為大家詳細(xì)介紹了vue3.0手動封裝分頁組件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue3.0手動封裝分頁組件的具體代碼,供大家參考,具體內(nèi)容如下

1.父組件引入

src/views/goods/components/goods-comment.vue

<!-- page表示初始化分頁時,默認(rèn)顯示第幾頁 -->
    <XtxPagination @change-page='changePage' :pagesize='reqParams.pageSize' :total='total' :page='1' />
    //調(diào)接口
 import {findCommentListByGoods } from '@/api/product.js'
 export default{
  setup(){
  // 篩選條件準(zhǔn)備
    const reqParams = reactive({
      // 當(dāng)前頁碼
      page: 1,
      // 每頁的條數(shù)
      pageSize: 10,
      // 是否有圖片
      hasPicture: null,
      // 篩選條件
      tag: null,
      // 排序的字段
      sortField: null
    })
    // 偵聽參數(shù)的變化
    watch(reqParams, () => {
   findCommentListByGoods(goods.value.id, reqParams).then(ret => {
        total.value = ret.result.counts
        list.value = ret.result.items
      })
    }, {
      immediate: true
    })
    // 控制頁碼的變化
    const changePage = (page) => {
      // 修改分頁參數(shù),重新調(diào)用接口即可
      reqParams.page = page
    }
    
  }
 }

2.子組件

src/components/library/xtx-pagination.vue

<template>
  <div class="xtx-pagination">
    <a @click='changePage(false)' href="javascript:;" :class="{disabled: currentPage===1}">上一頁</a>
    <span v-if='currentPage > 3'>...</span>
    <a @click='changePage(item)' href="javascript:;" :class='{active: currentPage===item}' v-for='item in list' :key='item'>{{item}}</a>
    <span v-if='currentPage < pages - 2'>...</span>
    <a @click='changePage(true)' href="javascript:;" :class='{disabled: currentPage===pages}'>下一頁</a>
  </div>
</template>
<script>
import { computed, ref } from 'vue'

export default {
  name: 'XtxPagination',
  props: {
    total: {
      type: Number,
      default: 80
    },
    pagesize: {
      type: Number,
      default: 10
    }
    // 默認(rèn)初始頁碼
    // page: {
    //   type: Number,
    //   default: 1
    // }
  },
  setup (props, { emit, attrs }) {
    // attrs表示父組件傳遞的屬性,但是props沒有接收的屬性,這種屬性不是響應(yīng)式的
    // 動態(tài)計算中期的頁碼信息
    // 每頁的條數(shù)
    // const pagesize = 8
    // 總頁數(shù)
    let pages = Math.ceil(props.total / props.pagesize)
    // 當(dāng)前頁碼
    // console.log(attrs.page)
    const currentPage = ref(attrs.page || 1)
    // 動態(tài)計算頁碼列表
    const list = computed(() => {
      // 當(dāng)父組件傳遞total的值發(fā)生變化時,計算屬性會重新計算
      pages = Math.ceil(props.total / props.pagesize)
      const result = []
      // 總頁碼小于等于5;大于5
      if (pages <= 5) {
        // 總頁碼小于等于5的情況
        for (let i = 1; i <= pages; i++) {
          result.push(i)
        }
      } else {
        // 總頁碼大于5
        if (currentPage.value <= 2) {
          // 左側(cè)臨界值
          for (let i = 1; i <= 5; i++) {
            result.push(i)
          }
        } else if (currentPage.value >= pages - 1) {
          // 右側(cè)臨界值
          for (let i = pages - 4; i <= pages; i++) {
            result.push(i)
          }
        } else {
          // 中間的狀態(tài)
          for (let i = currentPage.value - 2; i <= currentPage.value + 2; i++) {
            result.push(i)
          }
        }
      }
      return result
    })
    // 控制上一頁和下一頁變化
    const changePage = (type) => {
      if (type === false) {
        // 上一頁
        // 頁面是第一頁時,禁止點擊操作
        if (currentPage.value === 1) return
        if (currentPage.value > 1) {
          currentPage.value -= 1
        }
      } else if (type === true) {
        // 下一頁
        // 頁面是最后頁時,禁止點擊操作
        if (currentPage.value === pages) return
        if (currentPage.value < pages) {
          currentPage.value += 1
        }
      } else {
        // 點擊頁碼
        currentPage.value = type
      }
      emit('change-page', currentPage.value)
    }
    return { list, currentPage, pages, changePage }
  }
}
</script>
<style scoped lang="less">
.xtx-pagination {
  display: flex;
  justify-content: center;
  padding: 30px;
  > a {
    display: inline-block;
    padding: 5px 10px;
    border: 1px solid #e4e4e4;
    border-radius: 4px;
    margin-right: 10px;
    &:hover {
      color: @xtxColor;
    }
    &.active {
      background: @xtxColor;
      color: #fff;
      border-color: @xtxColor;
    }
    &.disabled {
      cursor: not-allowed;
      opacity: 0.4;
      &:hover {
        color: #333;
      }
    }
  }
  > span {
    margin-right: 10px;
  }
}
</style>

知識點:attrs表示父組件傳遞的屬性,但是props沒有接收的屬性,這種屬性不是響應(yīng)式的(vue3新增)

3.實現(xiàn)效果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue觸發(fā)真實的點擊事件跟用戶行為一致問題

    vue觸發(fā)真實的點擊事件跟用戶行為一致問題

    這篇文章主要介紹了vue觸發(fā)真實的點擊事件跟用戶行為一致問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue組件之自定義事件的功能圖解

    Vue組件之自定義事件的功能圖解

    本文通過圖文并茂的形式給大家介紹了Vue組件之自定義事件的功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 詳解vue大文件視頻切片上傳的處理方法

    詳解vue大文件視頻切片上傳的處理方法

    前端上傳大文件、視頻的時候會出現(xiàn)超時、過大、很慢等情況,為了解決這一問題,跟后端配合做了一個切片的功能,接下來就詳細(xì)的給大家介紹一下vue大文件視頻切片上傳的處理方法,需要的朋友可以參考下
    2023-08-08
  • VueJS實現(xiàn)用戶管理系統(tǒng)

    VueJS實現(xiàn)用戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了VueJS實現(xiàn)用戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • vue前端實現(xiàn)驗證碼登錄功能

    vue前端實現(xiàn)驗證碼登錄功能

    這篇文章主要介紹了vue前端實現(xiàn)驗證碼登錄功能,登錄時圖形驗證通過三種方法結(jié)合實例代碼給大家講解的非常詳細(xì), 通過實例代碼介紹了vue登錄時圖形驗證碼功能的實現(xiàn),感興趣的朋友一起看看吧
    2023-12-12
  • vue中改變滾動條樣式的方法

    vue中改變滾動條樣式的方法

    這篇文章主要介紹了vue中改變滾動條樣式的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 詳解利用eventemitter2實現(xiàn)Vue組件通信

    詳解利用eventemitter2實現(xiàn)Vue組件通信

    這篇文章主要介紹了詳解利用eventemitter2實現(xiàn)Vue組件通信,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue-cli3啟動服務(wù)如何自動打開瀏覽器配置

    vue-cli3啟動服務(wù)如何自動打開瀏覽器配置

    這篇文章主要介紹了vue-cli3啟動服務(wù)如何自動打開瀏覽器配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue使用webPack打包發(fā)布后頁面顯示空白的解決

    vue使用webPack打包發(fā)布后頁面顯示空白的解決

    這篇文章主要介紹了vue使用webPack打包發(fā)布后頁面顯示空白的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue 組件高級用法實例詳解

    vue 組件高級用法實例詳解

    這篇文章主要介紹了vue 組件高級用法,需要的朋友可以參考下
    2018-04-04

最新評論

新疆| 屯昌县| 德钦县| 高青县| 文登市| 岐山县| 遂平县| 精河县| 涿鹿县| 手游| 达州市| 东乡县| 浮山县| 东乌珠穆沁旗| 平昌县| 西安市| 运城市| 亳州市| 孝昌县| 富裕县| 修文县| 县级市| 永寿县| 资源县| 新竹市| 淮北市| 永城市| 五寨县| 苍梧县| 新化县| 隆子县| 安达市| 佛山市| 台山市| 潼关县| 通河县| 平凉市| 澜沧| 兴宁市| 陵川县| 平湖市|