电商平台项目------首页

2023-11-12

目录

Mock

swiper

seiper的基本使用

swiper在vue中的问题

组件通讯的方式

props 父给子通讯

自定义事件 子给父通讯

父组件通过ref获取子组件数据

全局事件总线 $bus 全能

作用域插槽

vuex

  $parent 和 $children

 sessionStorage,localStorage传值

路由传参

params

query

总结


Mock

Mock.jshttp://mockjs.com/

  • npm  i mockjs --save
  • src中创建mock文件夹
  • 准备json数据生成 json文件
  • 创建mockServe.js模拟数据  //Mock.mock 第一个参数为请求地址,第二个为请求数据
  • 在main中引入
//引入数据 webpack默认对外暴露:图片 json
import banner from './banner'
import floors from './floors'
//mock数据 第一个参数为请求地址,第二个为请求数据
Mock.mock('/mock/banner', { code: 200, data: banner })
Mock.mock('/mock/floors', { code: 200, data: floors })

swiper

seiper的基本使用

  • npm i swiper@5 --save
  • 引包(相应的css js)
  • 相对应的结构
  • 初始化swiper实例(必须有结构)
import Swiper from "swiper";
import 'swiper/css/swiper.css'


 <div class="swiper-container" id="mySwiper">
          <div class="swiper-wrapper">
            <div class="swiper-slide" v-for="item in bannerList" :key="item.id">
              <img :src="item.imgUrl" />
            </div>
          </div>
          <!-- 如果需要分页器 -->
          <div class="swiper-pagination"></div>

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


//swipers实例之前结构必须要有
//第一个参数:可以是字符串也可以dom节点
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',
    },
  })        

swiper在vue中的问题

swpier实例 如果存在异步请求结构还不完整不能在mounted生成swiper实例

使用watch监听加nextTick解决

watch监听数据的变化,然后拿到最新dom

Vue.nextTick 在下次dom更新循环结束之后 执行延迟回调在修改数据之后获取更新后的dom

组件通讯的方式

props 父给子通讯

父组件  <child msg="hello!"></child>

子组件  props: ['msg'],

自定义事件 子给父通讯

父组件 在子组件标签上使用 @自定义事件名=‘父组件里面的方法名’

<my-comp1 @xxx=“foo2”> < /my-comp1>

子组件  内容通过事件触发 使用 this.$emit(‘自定义事件名’,‘值’)传递数据

父组件通过ref获取子组件数据

1.直接放在标签中获取元素节点

2.放在组件中获取组件对象

<my-comp1 ref="r1"></my-comp1>

alert(this.$refs.r1.msg)

全局事件总线 $bus 全能

//创建vm
new Vue({
	el:'#app',
	render: h => h(App),
	beforeCreate(){                 //在初始化阶段前
		Vue.prototype.$bus = this   //配置全局总线,bus有总线的意思
	}
})
// 发送数据组件注册监听
methods: {
			sendStudentName(){        //提供发送数据
				this.$bus.$emit('hello',this.name)
	}
},
//监听执行获取数据
mounted() {
			this.$bus.$on('hello',(data)=>{      //绑定当前事件(这里以hello为例)
				console.log('我是School组件,收到了数据',data)
			})
		},
//移除监听
beforeDestroy(){        //收尾操作,销毁
			this.$bus.$off('hello')  //$off解绑当前组件所用到的事件
}

作用域插槽

有时让插槽内容能够访问子组件中才有的数据是很有用的。现在,假设B组件:

<template>
  <div>
    <p>我是B组件</p>
    <slot>{{obj.firstName}}</slot>
  </div>
</template>
 
<script>
export default {
  name:'B',
  data(){
    return {
      obj:{
        firstName:'leo',
        lastName:'lion'
      }
    }
  }
}
</script>

接收

<template>
  <div class="main">
    <p>我是A组件</p>
    <B>
      <template v-slot="data">
        {{data.obj.lastName}}
      </template>
    </B>
  </div>
</template>
ElementUI里面的表格el-table,当改变某一列展示的字段时,我们经常使用:
<el-table-column>
  <template slot-scope="scope">
    <span>{{scope.row.xxx}}</span>
  </template>
</el-table-column>

vuex

state中定义数据     CategoryList: [],
mutations修改state数据(同步) commit 执行
    CategoryList(state, payload) {
        state.CategoryList = payload
    },
actions(异步) 通知mutations修改数据 dispatch执行
async AstncCategoryList({ commit }) {
        let { data, code } = await axios.CategoryList();
        if (code !== 200) return
        commit('CategoryList', data)
    },
this.$store.dispatch("AstncCategoryList");
页面获取数据...mapState辅助函数computed映射
import { mapState } from "vuex";
 computed: {
    ...mapState({
      FloorList: (state) => state.home.FloorList,
    }),
  },

  $parent 和 $children

ref为子组件指定一个索引名称,通过索引来操作子组件;

  this. $parent可以直接访问该组件的父实例或组件;

  父组件也可以通过this.$children 访问它所有的子组件; 需要注意 $children 并不保证顺序,也不是响应式的。

 sessionStorage,localStorage传值

 LocalStorage或SessionStorage通常以键/值对形式的字符串进行存储,所以在存储时需要对数据格式进行转换,使用JSON.stringify方法将对象转换成字符串,提取时用JSON.parse方法将字符串转换成对象

  提供了5个方法,分别是clear(清除LocalStorage)、getItem(获取本地数据)、key(取下标对应键的值)、removeItem(删除以保存数据)、setItem(设置保存数据)。

  sessionStorage 的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。

  localStorage的生命周期是永久性的。假若使用localStorage存储数据,即使关闭浏览器,也不会让数据消失

    localStorage.setItem("localStorage",JSON.stringify(obj))
    this.localStorage=JSON.parse(localStorage.getItem('localStorage'))
    sessionStorage.setItem("sessionStorage",JSON.stringify(obj2))
    this.sessionStorage=JSON.parse(sessionStorage.getItem("sessionStorage"))

路由传参

params

router-link形式传参【在路径中显示参数,刷新页面参数不丢失】、

//配置路由
path:'/path/:id'
 
//传递方式,在path后面跟上对应的值
<router-link :to="`/path/${id}`"><router-link>
  
//获取参数
$route.params.id
 
//传递后形成的路径,刷新页面,参数不丢失
/path/id值

编程式导航形式传参,通过path匹配路由【在路径中显示参数,刷新页面参数不丢失】


//配置路由
path:'/path/:id'
 
//传递方式,通过path匹配路由,且在path后面跟上对应的值
this.$router.push({
  path: `/path/${id}`
})
 
//获取参数
$route.params.id
 
//传递后形成的路径,刷新页面,参数不丢失
/path/id值

编程式导航形式传参,通过name匹配路由【不在路径中显示参数,刷新页面参数丢失】

//传递方式,通过name匹配路由
this.$router.push({
  name: "name", //路由配置中的name
  params:{
    id:222
  }
});
 
//获取参数
$route.query.name

//传递后形成的路径,刷新页面,参数丢失
/path

query

router-link形式传参【在路径中 ?后面显示参数,刷新页面参数不丢失】

//传递方式
<router-link :to="{path:'/path',query:{id:'123'}}"><router-link>
//或者
<router-link :to="/path?id=123"><router-link>
 
//获取参数
$route.query.name
 
//传递后形成的路径,刷新页面,参数不丢失
/path?id=123

编程式导航形式传参,通过path匹配路由【在路径中 ?后面显示参数,刷新页面参数不丢失】

this.$router.push({
  path:'/path',
  query: {
    id:'123'
  }
})
 
//获取参数
$route.query.name
 
//传递后形成的路径,刷新页面,参数不丢失
/path?id=123

编程式导航形式传参,通过name匹配路由【在路径中 ?后面显示参数,刷新页面参数不丢失】

//传递方式,通过name匹配路由
this.$router.push({
  name:'name',//路由配置中的name
  query: {
    id:'123'
  }
})

 
//获取参数
$route.query.name
 
//传递后形成的路径,刷新页面,参数不丢失
/path?id=123

总结

query和params分别都有三种形式可以传参:

    router-link形式

    通过path匹配路由的编程式导航形式

    通过name匹配路由的编程式导航形式

而这其中只有params方式  的 通过name匹配路由的编程式导航形式 不会在路径中带有参数(且刷新页面参数丢失),其他都会带有参数值(刷新页面参数不丢失)

swiper组件封装

全局引入   注册使用

import Carsouel from './components/Carsouel/Carsouel.vue'

Vue.component(Carsouel.name, Carsouel)

   <div class="floorBanner" id="mySwiper">
              <Carsouel :list="List.carouselList"></Carsouel>
    </div>
<template>
  <div class="swiper-container" id="floor1Swiper" ref="cur">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="item in list" :key="item.id">
        <img :src="item.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: "Carsouel",
  props: ["list"],
  watch: {
    //监听bannerList的变化
    list: {
      immediate: true,
      //如果执行代表组件实例上有了数据 只能保证bannerlist数据已经有了,没有办法保证v-for执行完
      //v-for执行完结构才完整
      // Vue.nextTick 在下次dom更新循环结束之后 执行延迟回调在修改数据之后获取更新后的dom

      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",
            },

            // 如果需要滚动条
            scrollbar: {
              el: ".swiper-scrollbar",
            },
          });
        });
      },
    },
  },
};
</script>

<style>
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

电商平台项目------首页 的相关文章

随机推荐

  • Candence学习篇(6)使用allegro绘制元器件的PCB封装

    文章目录 前言 一 确定引脚坐标位置 二 新建封装 2 1设置封装的大小 2 2 设置焊盘路径 三 绘制PCB封装 3 1参数设置 3 2放置边框矩形 3 3放置装配层 放置丝印层和1脚指示原点 总结 前言 前面我们讲了 Candence学
  • 一只兔子每三个月生兔子JAVA,兔子生兔子问题

    关于兔子生兔子的算法详解 有一对兔子 从出生后第3个月起每个月都生一对兔子 小兔 子长到第三个月后每个月又生一对兔子 假如兔子都不死 问每个月的兔子总数为多少 分析 第1个月 1对 第2个月 1对 第3个月 原来的1对 新生1对 2对 第4
  • 指针在函数中的传递,搞懂这两幅图指针基础就过关了

    a本身即是char 类型 所以 a是char 类型 strcpy 中里面的参数是地址 adf 前面应该要加 吧 printf输出的是数组 所以用a
  • Git安装操作流程(超超超级详细)

    一 前言 被迫投向程序媛的行列 一切都要白手起家 接下来就以初学者的视角手把手记录 git 教程 由于我体质特殊 过手的普通操作也总能有各类bug 因此教程也会不定期更新我的bug们 二 Git 下载及安装 1 Git 安装 首先去 Git
  • html jwt权限控制,SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制

    在整合jwt之前 我们首先要在SpringBoot中整合security的模块 来实现基于security的授权控制 用过security的人都知道 它的功能无比的强大比shiro还要强大 但是今天我就介绍security中关于权限控制和是
  • Linux基础与实操_韩顺平mooc知识点笔记

    Linux 目录 Linux 一 介绍 1 1目录结构 二 实操 2 1远程登陆 2 2 vi和vim 2 2 1 三种模式 2 2 2 快捷键 2 3 关机 重启 2 5 用户管理 2 5 1 用户家目录 2 5 2 添加用户 2 5 3
  • java入门到进阶书单

    入门 1 2年 初级 Head First Java 主要讲设计模式 这个是设计思想方面的 我之所以觉得它应该最早学 就是觉得这个对今后你看jdk tomcat源码 看第三方项目源码 以及一些大数据中间源码有所帮助 另外也有一本书叫 大话设
  • Matlab-矩阵

    目录 一 矩阵的操作 1 创建矩阵 1 建立简单矩阵 2 建立特殊矩阵 3 希尔伯特 Hilbert 矩阵 4 托普利兹 Toeplitz 矩阵 5 0 1间均匀分布的随机矩阵 6 标准正态分布随机矩阵 7 魔方矩阵 8 帕斯卡矩阵 9 范
  • IT中文技术站十大网站收藏

    1 CSDN www csdn net CSDN Chinese Software Developer Network 创立于1999年 是中国的IT社区和服务平台 为中国的软件开发者和IT从业者提供知识传播 职业发展 软件开发等全生命周期
  • 六种线程状态详解

    1 线程状态概述 线程从创建到运行到结束是一个线程的生命周期 当线程被创建到结束过程中 不是一直处于运行状态的 下面来介绍一下线程从运行到结束所有的状态 线程状态 导致状态发生条件 NEW 新建 线程刚被创建 没有启动 也就是还没调用sta
  • LeetCode 841.钥匙和房间 - C++ - 小结

    钥匙和房间 有 N 个房间 开始时你位于 0 号房间 每个房间有不同的号码 0 1 2 N 1 并且房间里可能有一些钥匙能使你进入下一个房间 在形式上 对于每个房间 i 都有一个钥匙列表 rooms i 每个钥匙 rooms i j 由 0
  • python制作模型排放清单_四川省人为源大气污染物排放清单及特征

    大气污染源排放清单是污染源在一定时间跨度和空间区域内排放到大气中的各种污染物的数量列表 在支持空气质量管理决策的技术体系中 构建准确 完整和更新及时的大气污染物排放清单是识别污染来源的基础环节 也是制订污染控制策略的根本依据 同时也对大气污
  • 【论文笔记】Interventional Few-Shot Learning

    概述 目前流行的meta learning fine tuning等小样本学习方法都利用外部知识进行预训练 以使模型在小样本上有好的效果 而预训练知识很可能会成为影响样本特征与标签之间的关系的混杂因素 使模型得到错误的结果 本文从因果的角度
  • error while loading shared libraries: libssl.so.6

    执行 scripts mysql install db user mysql 安装mysql的时候报错 bin my print defaults error while loading shared libraries libssl so
  • synchronized、volatile底层原理详解

    文章目录 一 synchronized 1 监视器Monitor monitor结构及原理 监视器Monitor有两种同步方式 互斥与协作 2 Mutex lock mutex的工作方式 3 java对象头 java对象布局 4 无锁 偏向
  • PCL 安装

    1 安装pcl 1 1下载文件 地址链接 Release PCL 1 11 1 PointCloudLibrary pcl GitHub 下载的文件 PCL 1 11 1 AllInOne msvc2019 win64 exe pcl 1
  • 使用groupingcomparator求同一订单中最大金额的订单

    有如下订单数据 现在需要求出每一个订单中成交金额最大的一笔交易 订单id 商品id 成交金额 Order 0000001 Pdt 01 222 8 Order 0000001 Pdt 05 25 8 Order 0000002 Pdt 03
  • Linux内存精确统计工具

    1 ps mem介绍 ps mem是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单python脚本 它会分别计算一个程序私有内存总量和共享内存总量 并以更准确的方式给出了总的内存使用量 2 安装方式 包管理器 pip
  • qq 浏览器不支持java_各种浏览器开启JavaScript脚本方法

    随着网站设计技术的发展 为了用户友好体验 大部分网站使用了JavaScript脚本设计 如果您的浏览器禁用或关闭的JavaScript支持 那么可能造成网站体验差或网站部分功能无法使用 下面提供10种浏览器如何开启JavaScript的方法
  • 电商平台项目------首页

    目录 Mock swiper seiper的基本使用 swiper在vue中的问题 组件通讯的方式 props 父给子通讯 自定义事件 子给父通讯 父组件通过ref获取子组件数据 全局事件总线 bus 全能 作用域插槽 vuex paren