项目中的mockjs、轮播图、数组去重总结

本文介绍了如何使用MockJS模拟数据并拦截Ajax请求,以及Swiper轮播图组件的配置和在Vue中正确初始化的方法,强调了在数据异步加载时使用$nextTick确保Swiper动态效果的实现。同时,还探讨了两种数组去重的策略,分别是传统的for循环和使用Set数据结构。这些技巧在前端开发中十分实用。
摘要由CSDN通过智能技术生成

一、mockjs模拟数据

官方定义:生成随机数据,拦截 Ajax 请求 (浏览器会拦截向服务器发送的请求)

使用示例:

/*
    先下载好mockjs插件 npm install --save mockjs
    然后在项目中建好一个mock相关的文件夹(其中存放要模拟生成的数据文件和mock服务文件)
*/
//mockServer.js(mock服务文件)
​
//引入mock
import Mock from 'mockjs'
//把JSON数据格式引入进来(即使JSON文件没有对外暴露)
//webpack默认对外暴露的有:图片、JSON数据格式
import banner from '../mock/banner'
​
//mock数据:第一个参数请求地址,第二个参数:请求数据
Mock.mock("/mock/banner", { code: 200, data: banner })
​
//banner.json数据文件
[{
        "id": "1",
        "imgUrl": "/images/banner1.jpg"
    },
    {
        "id": "2",
        "imgUrl": "/images/banner2.jpg"
    },
    {
        "id": "3",
        "imgUrl": "/images/banner3.jpg"
    },
    {
        "id": "4",
        "imgUrl": "/images/banner4.jpg"
    }
]
​
//mock请求JSON数据接口(模拟向服务器发送请求)
export const reqBannerList = () => {
    return mockResquests({
        url: '/banner', //因为配置了baseURL,所以/mock可以省略
        method: 'get'
    })
}
​
//最后在main.js入口文件中引入mockServer.js---mock数据(该文件没有对外暴露,所以直接引入)
import './mock/mockServer.js'

二、Swiper搭配轮播图在项目中使用

Swiper使用步骤: 第一步:引入依赖包【swiper.js|swiper.css】 第二步:静态页面中结构必须完整【container、wrap、slider】,类名不能瞎写 第三步:初始化swiper实例

以上基本使用方法都可以从Swiper官网文档获取 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发

重点:初始化swiper实例在哪里书写?动态效果为什么没有出来?

初始化swiper实例之前,页面中的节点(结构)务必要有, 对于Vue一个组件而言,mounted[组件挂载完毕:相应的结构不就有了吗]

Swiper需要获取到轮播图的节点DOM,才能给swiper轮播添加动态效果, 因为没有获取到节点(轮播图中的图片都是使用v-for动态获取,而v-for遍历所用到的数据是通过通过ajax向服务器发请求,存在异步,所以mounted挂载完后,结构不一定完整)

第一种解决方案:(不推荐)

给mounted中的swiper实例加一个定时器(同样延迟执行),但是这种解决方案存在风险(无法确定用户请求到底需要多长时间),因此没办法确定延迟器时间。

第二种(watch+$nextTick)(完美)

nextTick:在下次DOM更新 循环结束之后,执行延迟回调。在修改数据之后,立即使用这个方法,获取更新后的DOM

watch: {
    //监听bannerList数据变化
    bannerList: {
    //当前handler函数执行:只能保证bannerList数据一级有了,但是没法保证v-for已经结束
      handler() {
        this.$nextTick(() => {
          var mySwiper = new Swiper(".swiper-container", {
            loop: true, // 循环模式选项
            // 如果需要分页器
            pagination: {
              el: ".swiper-pagination",
              clickable: true,
            },
            // 如果需要前进后退按钮
            navigation: {
              nextEl: ".swiper-button-next",
              prevEl: ".swiper-button-prev",
            },
            // 如果需要滚动条
            scrollbar: {
              el: ".swiper-scrollbar",
            },
          });
        });
      },
    },
  },

HTML结构:

<!--banner轮播-->
        <div class="swiper-container" id="mySwiper">
          <div class="swiper-wrapper">
            <div
              class="swiper-slide"
              v-for="(carsoule, index) in bannerList"
              :key="carsoule.id"
            >
              <img :src="carsoule.imgUrl" />
              <span style="display: none">{{ index }}</span>
            </div>
          </div>
          <!-- 如果需要分页器 -->
          <div class="swiper-pagination"></div>
​
          <!-- 如果需要导航按钮 -->
          <div class="swiper-button-prev"></div>
          <div class="swiper-button-next"></div>
        </div>

三、数组去重

在项目中的应用为:你多次点击某一产品的品牌,导致其多次出现在面板上!!!(此时就需要应用数组去重)

//本人想到的第一种解法
    var arr = [1, 2, 3, 4, 5, 2, 7, 5, 1, 8];
    var newArr = [];
    for (let i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) == -1) {
            newArr.push(arr[i]);
        }
    }
    console.log(newArr); // 1,2,3,4,5,7,8
//第二种解法(Set是ES6提出的一种新的数据结构,类似于数组,但成员的值都是唯一的)
    let arr = [1, 2, 3, 4, 5, 2, 7, 5, 1, 8];
    let newArr = new Set();
    arr.forEach(item => newArr.add(item));
    console.log(newArr); // 1,2,3,4,5,7,8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三年ing

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值