vue3中实现滚动到底发送请求获取数据并加载数据

这个项目是vue3的,用了axios请求,element puls插件。

有后端java请求的数据。

代码如下:

<template>
  <el-row class="title">
    <el-col :span="24"> <h2>全部水果</h2></el-col>
  </el-row>
  <div class="content">
    <el-row :gutter="30">
      <el-col v-for="(item, index) in shopList" :key="item" :span="6">
        <el-card :body-style="{ padding: '0px' }">
          <el-image :src="item.picture" class="image" fit="cover" />
          <div class="item-title">
            <span>{{ item.name }}</span>
          </div>
        </el-card>
        <router-link :to="details + item.id">
          <div class="details">
            <div class="list">
              <span>商品:{{ item.name }}</span>
              <span>价格:¥{{ item.price }}</span>
            </div>
          </div>
        </router-link>
      </el-col>
      <!-- 加载完成显示 -->
      <el-col class="tips" v-if="tips"> 已显示全部商品 </el-col>
    </el-row>
  </div>
</template>

JS:

<script setup>
import { ref, reactive, onMounted } from "vue";
// API
import { shopApi } from "@/api/api";

// 跳转details
const details = "details?id=";

onMounted(async () => {
  await getData();
  // →滚动条事件
  window.addEventListener("scroll", load);
});
// 水果数据
const pagination = reactive({
  current: 1,
  size: 8,
});
// 请求后数据
const shopList = ref();
const tips = ref(false);
// 封装请求
const getData = async () => {
  const parameter = pagination.current + "/" + pagination.size;
  const res = await shopApi(parameter);
  const data = res.data.result;
  if (res.success) {
    shopList.value = data.records;
  } else {
    ElMessage.error(res.message);
  }
  const total = data.total;
  const length = data.records.length;
  if (length % 4 != 0 || total == length) {
    tips.value = true;
  }
};
// 滚到加载事件
const load = async (e) => {
  const scrollTop = document.documentElement.scrollTop;
  const clientHeight = document.body.clientHeight;
  const totalHeight = scrollTop + clientHeight - 326;
  const cosnt = pagination.size / 4;
  if (totalHeight > 324 * cosnt) {
    pagination.size += 4;
    await getData();
  }
};
</script>

CSS(scss):

<style lang="scss" scoped>
.el-carousel__item img {
  line-height: 300px;
  margin: 0;
  .banner-img img {
    height: 100%;
  }
}
// 水果展示
.title {
  margin-top: 20px;
  text-align: center;
  font-size: 28px;
}
.content {
  width: 1040px;
  margin: 20px auto;
  .el-col {
    margin-bottom: 20px;
    position: relative;
  }
  .details {
    position: absolute;
    top: 0;
    width: 236px;
    height: 100%;
    background-color: #000;
    border-radius: 4px;
    transition: all 0.5s;
    opacity: 0;
    .list {
      color: #fff;
      padding: 12px;
      display: flex;
      flex-wrap: wrap;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      height: 100%;
      span {
        display: block;
        font-size: 24px;
      }
    }
  }
  .details:hover {
    opacity: 0.6;
  }
  .image {
    height: 250px;
    img {
      height: 100%;
    }
  }
  .item-title {
    padding: 14px;
    border-top: 1px solid #eee;
    text-align: center;
    width: 100%;
    display: block;
  }
}
.tips {
  margin-top: 20px;
  text-align: center;
  color: #999;
}
</style>

axios请求

// http.js 封装了   BASE_URL是url请求地址
const http = {
  get(url) {
    return service
      .get(BASE_URL + url)
      .then((res) => {
        return res.data;
      })
      .catch((err) => {
        return err;
      });
  },
}

// api.js
import http from "./http.js";
// 商品管理
export const shopApi = (parameter) => http.get("/shop/page/" + parameter);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue.js,可以使用axios库进行网络请求。根据提供的引用内容,可以看到在代码定义了一个http对象,其封装了一个get方法用于发送GET请求。该get方法使用了axios库,并通过传入的url参数拼接完整的请求地址。 在Vue组件的生命周期钩子函数(如created),可以调用http对象的get方法来请求数据。通过调用get方法并传入请求的地址,可以获取到请求返回的数据。然后,将获取到的数据绑定到Vue组件的data属性,以便在页面显示加载数据。 以下是一个示例代码,展示了如何在Vue3加载请求数据: ```javascript <template> <div> <h2>页面加载请求数据示例</h2> <ul> <li v-for="item in dataList" :key="item.id">{{ item.name }}</li> </ul> </div> </template> <script> import axios from 'axios'; export default { data() { return { dataList: [], // 存储请求返回的数据 }; }, created() { axios.get('/api/data') // 发送GET请求请求地址为/api/data .then(response => { this.dataList = response.data; // 将请求返回的数据赋值给dataList }) .catch(error => { console.error(error); }); }, }; </script> ``` 在上述示例代码,created生命周期钩子函数发送了一个GET请求请求地址为`/api/data`。请求返回的数据通过response.data获取,并赋值给dataList属性。在模板使用v-for指令遍历dataList,将请求数据显示在页面。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Vue实现调用接口加载页面初始数据](https://download.csdn.net/download/weixin_38720997/12933159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue3实现滚动到底发送请求获取数据加载数据](https://blog.csdn.net/weixin_55852699/article/details/127740018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骏浩

02年的前端小白

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值