前端项目-05-轮播图banner和Floor组件开发-全局轮播图组件抽取

news/2024/7/10 3:03:41 标签: vue, 前端

目录

1-轮播图模块数据开发

2-floor组件开发

3-抽取全局轮播图组件


1-轮播图模块数据开发
 

轮播图需要用到swiper插件,先安装5.4.5版本的swiper:
npm  install --save swiper@^5.4.5 --force

模拟从服务器获取数据;
1-编写mockRequests的js文件和之前编写的request的js文件类似,就修改一下baseURL,我们模拟的数据请求路径约定为/mock开头

2-src/api/index.js中引入mockRequest.js并且对外保留方法

3-找到对应的组件/页面,在页面加载过程中派发action获取轮播图数据

4-因为轮播图在home模块,所以去store/home去真正获取数据,存取数据

5-组件页面数据获取,循环遍历数据

6-swiper组件的使用
安装swiper插件:npm  install --save swiper@^5.4.5 --force
文件引入src\pages\home\listContainer\index.vueimport Swiper from 'swiper';
main.js中引入样式【因为swiper样式在其他页面/组件也需要使用】,import 'swiper/css/swiper.css';
通过watch+nextTick()函数实现轮播图展示效果
 

 

 ps:
(1)我们不能将new Swiper放入到mounted中,因为mounted是页面加载完成展示,但是我们是通过axios异步请求服务端获取数据而且还v-for循环获取数据(也要耗时),页面结构没有完全加载完成,会导致轮播图功能显示不全;
(2)所以通过watch+nextTick()实现此功能;
(3) swiper对象里面pagination属性clickable:true,默认是false,点击轮播图下面小圆点实现图片动态展示需要用到这个属性;
(4)document.querySelector(".swiper-container")可以使用ref来代替
...

 

2-floor组件开发
 

获取floor的数据,
1-api中定义接口请求;2-页面派发action;3-vuex中请求和store数据;4-页面拿到服务端的数据展示;
注意:页面派发action是哪个页面派发?因为home页面需要展示两次,所以只能再home组件发送请求,不能在floor组件发action;home和floor是父子关系;



 

 

home组件中派发action:

 

home仓库中store数据(floor是home的字组件)

 

 

循环遍历数据:

 

ps:
(1)v-for标签也可以在自定义组件中使用
(2)现在是在home组件中显示两个floor,但是home中的数据需要传输到floor组件中,需要父子组件通讯;
父子组件通讯:
props,

自定义事件:$on,$emit
全局事件总线:$bus 全能
插槽
vuex

父组件中自定义属性list:

 

子组件接受父组件的数据:

 

子组件展示数据:

 

 

ps:(1)swiper使用步骤:引入swiper,引入swiper样式,new swiper实例
(2)注意floor轮播图这边,这里在mounted中使用swiper就没有首页banner中的mounted中使用swiper问题;因为floor的mounted中并没有派发action获取数据,floor中的数据都是从父组件home中发起请求传递过来的,所以这里的swiper可以直接使用

 

3-抽取全局轮播图组件

 

       首页的轮播图再几个地方使用,我们拆分为公用组件(全局组件),注册一次,就可以直接使用。现在在首页的banner在watch中实例化swiper,目前floor中在mounted中实例化swiper;我们先要改造floor中的结构,这样结构类似,我们方便抽取...

全局组件我们都放到src/components/ 文件夹下;

<template>
    <div class="swiper-container" id="floor1Swiper" ref="cur">
    <div class="swiper-wrapper">
        <div class="swiper-slide" v-for="carousel in list" :key="carousel.id">
            <img :src="carousel.imgUrl" />
        </div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>

    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
    </div>
  
</template>

<script>
import Swiper from 'swiper'
export default {
    name:'Carousel',
    props:['list'],
    //floor这里watch监听不到list数据变化,因为list是父组件传递过来的,是不变的...需要使用immediate属性
    watch:{
        list:{
            //不管数据有没有变化,立即监听
            immediate:true,
            handler(newValue,oldValue){
                this.$nextTick(()=>{
                    var mySwiper = new Swiper (
                        this.$refs.cur, 
                        {
                            loop: true, // 循环模式选项    
                            // 如果需要分页器
                            pagination: {
                                el: '.swiper-pagination',
                                clickable:true
                            },    
                            // 如果需要前进后退按钮
                            navigation: {
                                nextEl: '.swiper-button-next',
                                prevEl: '.swiper-button-prev',
                            },
                        })   
            });
        }
    }
  }
}
</script>

<style>

</style>



 

 

main.js中注册全局组件:

 

使用全局组件:

 

 


http://www.niftyadmin.cn/n/192886.html

相关文章

Java多线程与并发

一、并发出现问题的根源: 并发三要素 1. 可见性: CPU缓存引起 可见性&#xff1a;一个线程对共享变量的修改&#xff0c;另外一个线程能够立刻看到。 2. 原子性: 分时复用引起 原子性&#xff1a;即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断&…

运维是不是没有出路了?

瑞典马工的​​《是时候让运维集体下岗了》一出&#xff0c;就让运维人为之一颤&#xff0c;​人人自危。文章开篇就提到&#xff1a;​​明人不说暗话&#xff0c;在云原生和DevOps成熟的今天&#xff0c;运维作为一个岗位和团队已经完成了历史任务&#xff0c;应该退出舞台了…

pandas中的str属性常用的字符串方法总结

Pandas 中的 str 属性提供了一系列常用的字符串方法&#xff0c;下面总结了一些常用的方法&#xff1a; 字符串拆分和拼接 split(separator, n)&#xff1a;将字符串按照指定的分隔符分隔成 n 个部分&#xff0c;默认分隔符为任何空白字符。 join(iterable)&#xff1a;用指…

[数据结构]:22-图(邻接矩阵)(C语言实现)

目录 前言 已完成内容 图实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-AdjMatrixCommon.cpp 04-AdjMatrixFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容&#xff0c;除其中使用到C引用外&#xff0c;全为C语言代码。使用C引用主要是为…

go调用docker远程API(二)-docker API 的容器操作

文章目录1 获取容器列表2 查看指定容器信息3. 查看容器日志4 创建容器4.1 简单使用4.1.1 语法4.1.2 完整示例4.2 端口映射4.2.1 语法4.2.2 完整示例4.3 挂载本机目录/文件4.3.1 语法4.3.2 完整代码5. 启动容器6 停止容器7 删除&#xff08;已停止的&#xff09;容器8 进入容器执…

CRM系统有哪六点在2023年更加值得关注

2023年&#xff0c;你已经开始布局并借力CRM系统了吗&#xff1f;你是否考虑过从今天开始&#xff0c;更深入地使用CRM&#xff0c;让CRM发挥出比以往更大的效用&#xff1f;Zoho参考了业内对CRM趋势的分析&#xff0c;并融入了新的思考&#xff0c;下面说说2023年哪些CRM趋势值…

操作系统笔记--连续内存分配的内存碎片问题

目录 1--内存碎片问题 2--内存分区的动态分配 3--压缩式和交换式碎片整理 1--内存碎片问题 空间内存不能被完全利用&#xff0c;会导致内存碎片问题&#xff1b; 内存碎片分为外部碎片和内部碎片&#xff0c;外部碎片表示在分配单元之间未被使用的内存&#xff1b;内部碎片表…

Linux系统内Python打包程序pyinstaller

1、sudo apt install python3-pip 2、sudo apt update 3、sudo apt install make build-essential libssl-dev zlib1g-dev liblzma-dev 4、sudo apt install libbz2-dev libreadline-dev libsqlite3-dev llvm 5、sudo apt install libncurses5-dev libncursesw5-dev xz-utils t…