pc 电商平台----search模块

2023-11-01

目录

vuex中的模块化

Object.assign()用法

watch监听

数组方法splice与split

splice

split() 方法

数组去重

自定义分页器


vuex中的模块化

vuex使用三部曲   

写请求

页面dispatch派发actions 保存到vuex中(actions 发请求commit通知mutations ,mutations修改仓库数据)

页面捞取数据(辅助函数mapState 映射为计算属性)

大仓库

import Vue from 'vue'
import Vuex from 'vuex'
import home from './home'
import search from './search'
//需要使用插件
Vue.use(Vuex)


// 对象暴露一个store类的一个实例
export default new Vuex.Store({
    modules: {
        home,
        search
    }
})

 小仓库

import axios from '@/api'
// home 组件的小仓库
const state = {
    //默认初始值要依据服务器数据格式
    CategoryList: []
}
const mutations = {
    CategoryList(state, payload) {
        state.CategoryList = payload
    }
}
const actions = {
    //通过api接口获取数据
    async AstncCategoryList({ commit }) {
        let { data, code } = await axios.CategoryList();
        if (code !== 200) return
        commit('CategoryList', data)
    }
}
const getters = {}
export default {
    state,
    mutations,
    actions,
    getters
}

 挂载

//引入仓库
import store from './store'
new Vue({
  render: h => h(App),
  //组件身上会多一个store的属性
  store
}).$mount('#app')

 页面

state中分模块 计算属性映射为页面变量

 import { mapState } from "vuex";
 computed: {
    ...mapState({
      //右侧需要的是一个函数,当使用这个计算属性的时候,右侧函数会立即执行一次
      //注入一个state
      CategoryList: (state) => state.home.CategoryList,
    }),
  },

  actions 不分模块

  mounted() {
    //通知vuex发请求,获取数据存储于vuex中
    this.$store.dispatch("AstncCategoryList");
  },

getters用于简化数据

//计算属性 简化数据
const getters = {
    //当前仓库的state
    goodsList(state) {
        //以防网络延迟返回undefined
        return state.SearchList.goodsList || []
    }
}

Object.assign()用法

1.Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
2.Object.assign方法实行的是浅拷贝,而不是深拷贝。目标对象拷贝得到的是这个对象的引用
3.语法:Object.assign(target, …sources)

let aaa = {
 text: 2,
 value: 11,
}

let bbb = {
  text: 3
}

let ccc = Object.assign(aaa,bbb) // aaa目标对象, bbb源对象

console.log(aaa) //3 11
console.log(bbb) //3
console.log(ccc) //3 11

总结:Object.assign()合并对象时,若存在键名相同,值不同,则以合并后的值(ccc)该键的值为源对象(bbb)的值,且目标对象(aaa)的值也改变了

watch监听

这就是异步请求的问题了,就比如我们异步请求一个数据,然而主线程依旧正常运行,当我们监听到数据请求过来了,有数据了,才能再去进行其他操作,这就是监听的意义

watch监听里面有几个属性:immediate,deep和handler

watch: {
    //监听carouselList状态发生变化
    carouselList: {
      //深度监听
      deep:true
      //立即监听
      immediate:true
      //监听到carouselList状态发生变化了
      handler((newValue, oldValue){
        //监听到数据后的下一步操作
      }
   }      
}

数组方法splice与split

splice

splice()的主要用途是向数组中部插入项,方式有以下三种:

1、删除:可以删除任意数量的项,只需要指定两个参数:要删除的第一项的位置和要删除的项数。

2、插入:可以向指定位置插入任意数量的项,只要提供三个参数:起始位置、0(要删除的项数)、和要插入的项。

3、替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,指定三个参数:起始位置、要删除的项数、和要插入的任意数量的项。

splice()方法始终返回一个数组,该数组包含从原始数组中删除的项(如果没有删除任何项,返回一个空数组)

代码显示方法:

var colors =["red","green","blue"];
var removed = colors.splice(0,1);//删除第一项
console.log(colors);
console.log(removed);
 
removed = colors.splice(1,0,"yellow","blank");//从位置1插入两项
console.log(colors);
console.log(removed);
 
removed = colors.splice(1,1,"yellow","blank");//插入两项,替换一项
console.log(colors);
console.log(removed);
————————————————
[ 'red' ]
[ 'green', 'yellow', 'blank', 'blue' ]
[]
[ 'green', 'yellow', 'blank', 'blank', 'blue' ]
[ 'yellow' ]

split() 方法


split() 方法用于把一个字符串分割成字符串数组。

separator参数:必需填。字符串或正则表达式,从该参数指定的地方分割 stringObject。
howmany参数:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度

"2:3:4:5".split(":")    
//将返回["2", "3", "4", "5"]

"|a|b|c".split("|") 
//将返回["", "a", "b", "c"]
"hello".split("")   
//可返回 ["h", "e", "l", "l", "o"],分割单词

"hello".split("", 3)    
//可返回 ["h", "e", "l"],取单词前三个字母

数组去重

利用set结构成员值唯一的特点

 var arr = [100, 20, 30, 50, 30, 100, 20, 50];//[100,20,30,50]
 var arrSet = new Set(arr);
 //arrSet即没有重复元素的数组

//遍历旧数组,然后拿着旧数组去查询新数组,如果该元素在新数组里面没有出现过,我们就添加,否则就不添加

//利用新数组indexOf(数组元素),如果返回是-1就说明新数组里没有该元素


	function unique(arr){
	    var newarr = [];
		for(i=0;i<arr.length;i++){
			if(newarr.indexOf(arr[i]) === -1){
			newarr.push(arr[i]);
			    }	
			}
			return newarr;	
	    }
			var arr1 =  unique(['a','v','a']);
			console.log(arr1)
     

自定义分页器

  • 电商平台同时展示很多数据减小服务器压力采用分页
  • 需要知道我们当前是第几个pageNo字段,代表当前页数
  • 每一个需要展示多少条数据pageSize字符
  • 一共有多少也条数据total  【可以知道分页器一共有几页】
  • 连续页码数:5|7【奇数】continues
  •    @getPageNo="getPageNo" 获取当前页数

重点:计算 起始 结束连续页码数(当前页在中间加2或减2 )

<template>
  <div class="pagination">
    <button :disabled="pageNo == 1" @click="$emit('getPageNo', pageNo - 1)">
      上一页
    </button>
    <button
      v-if="statrtNumAndEndNum.start > 1"
      @click="$emit('getPageNo', 1)"
      :class="{ active: pageNo == 1 }"
    >
      1
    </button>

    <button v-if="statrtNumAndEndNum.start > 2">···</button>
    <!-- v-for可以遍历对象 数字 字符串 数组
    遍历结束页码数(只要大于等于开始页码数其他隐藏)
    -->
    <button
      v-for="(page, index) in statrtNumAndEndNum.end"
      :key="index"
      @click="$emit('getPageNo', page)"
      :class="{ active: pageNo == page }"
      v-if="page >= statrtNumAndEndNum.start"
    >
      {{ page }}
    </button>

    <button v-if="statrtNumAndEndNum.end < totalPage - 1">···</button>
    <button
      v-if="statrtNumAndEndNum.end < totalPage"
      @click="$emit('getPageNo', totalPage)"
      :class="{ active: pageNo == totalPage }"
    >
      {{ totalPage }}
    </button>
    <button
      :disabled="pageNo == totalPage"
      @click="$emit('getPageNo', pageNo + 1)"
    >
      下一页
    </button>

    <button style="margin-left: 30px">共 {{ total }} 条</button>
  </div>
</template>

<script>
//:pageNo="1" 当前第几页
//:pageSize="3" //一页多少条
//:total="91" //总共多少条
//:continues="5" //连续页码数
export default {
  name: "pagination",
  props: ["pageNo", "pageSize", "total", "continues"],
  computed: {
    //计算出多少页
    totalPage() {
      //向上取整计算多少页
      return Math.ceil(this.total / this.pageSize);
    },
    // 计算出连续页码数
    statrtNumAndEndNum() {
      const { continues, pageNo, totalPage } = this;
      // 存储开始数字与结束数字
      let start = 0,
        end = 0;
      //连续页码数至少为5(特殊情况只有4页)
      if (continues > totalPage) {
        start = 1;
        end = totalPage;
      } else {
        //总页数一定大于5
        // 比如当前为8  连续为5       // 6-7 8  9-10 5(8-5/2=8-2=6)
        // 比如当前为8  连续为7       // 5-6-7 8  9-10-11(8-3=5)
        start = pageNo - parseInt(continues / 2);
        end = pageNo + parseInt(continues / 2);
        //排除start为0或者负数
        if (start < 1) {
          start = 1;
          end = continues;
        }
        //排除超出总页数的情况
        if (end > totalPage) {
          end = totalPage;
          //假如当前是31页  (27-28-29-30  31)
          //假如当前是29页  (27-28-29  30  31)
          start = totalPage - continues + 1; //31-5+1
        }
      }
      return { start, end };
    },
  },
};
</script>

<style lang="less" scoped>
.pagination {
  text-align: center;
  button {
    margin: 0 5px;
    background-color: #f4f4f5;
    color: #606266;
    outline: none;
    border-radius: 2px;
    padding: 0 4px;
    vertical-align: top;
    display: inline-block;
    font-size: 13px;
    min-width: 35.5px;
    height: 28px;
    line-height: 28px;
    cursor: pointer;
    box-sizing: border-box;
    text-align: center;
    border: 0;

    &[disabled] {
      color: #c0c4cc;
      cursor: not-allowed;
    }

    &.active {
      cursor: not-allowed;
      background-color: #409eff;
      color: #fff;
    }
  }
  .active {
    background: skyblue;
  }
}
</style>

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

pc 电商平台----search模块 的相关文章

随机推荐

  • 隐私计算S2赛季-谁是真正的王者

    去年至今 隐私计算大约经历了如火如荼的一年 身为局中人 看穿居中事 道尽居中话 为的无非是让更多的来了解这个比较细分的AI领域 秋天本是硕果累累的丰收季 隐私计算这个行业算是金秋吗 一喜一悲 一喜为百花齐放 我所知道在布 挂 局 钩 隐私计
  • VL53L0X调试总结

    最近调VL53L0X花了不少时间 特总结下 https www st com content st com en search html q vl53l t products page 1 VL53L0X测距2m VL53L1X测距4m 支
  • networkx 中文学习手册

    文章目录 创建图表 节点 边 检查图的元素 从图中删除元素 使用图构造函数 什么用作节点和边 访问边和邻居 向图 节点和边添加属性 图形属性 节点属性 边缘属性 多图 图生成器和图操作 1 应用经典的图操作 例如 2 使用对经典小图之一的调
  • Harmony OS WiFi编程——连接热点、创建热点

    本节主要介绍如何在HiSpark WiFi IoT套件上使用Hamony OS的WiFi相关编程接口 相关知识点 WiFi的工作模式 AP模式 热点模式 提供无线接入服务 允许其它无线设备接入 提供数据访问 一般的无线路由 网桥工作在该模式
  • JavaNote 1.7final、finally、访问权限

    一 final 1 final的变量的值不能被改变 2 final的方法不能被重写 3 final的类不能被继承 二 finally finally 语句块 必须执行 通常在finally语句块中执行资源清除工作 如关闭打开的文件 删除临时
  • 基于Sklearn实现LDA算法

    文章目录 一 LDA算法 二 sklearn实现LDA 三 结果如图 四 总结 五 参考 一 LDA算法 1 线性判别分析 Linear Discriminant Analysis LDA 方法常被用于数据预处理中的降维 dimension
  • ArcMap布局视图的图例设置,如显示符号、标注、描述等

    转载请注明作者 独孤尚良dugushangliang 出处 https blog csdn net dugushangliang article details 81305762 如上图所示 为了达到以上的图例显示效果 鄙人上下求索 废了不
  • vue动态生成二维码,扫码登录

    首先找到对应的的三个接口 1 二维码获取key接口 接口说明 调用此接口可生成一个key 2 二维码生成接口 接口说明 调用此接口传入上一个接口生成的key可生成二维码图片的base64和二维码信息 可使用base64展示图片 或者使用二维
  • mysql自动启动设置用Systemctl start mysqld启动

    1 如果你是用yum安装的话就不需要进行设置了 用systemctl restart mysqld启动报如下错 2 查看系统服务有没有mysqld chkconfig list 3 MySQL启动关闭添加到 etc init d mysql
  • 解决Chrome浏览器中部分字体显示模糊的问题

    如果在Chrome浏览器中查看某些网页时 发现大部分字体显示清晰 但是另外部分字体显示模糊看不清的话 有可能是浏览器字体设置的问题 解决方式如下 1 点击Chrome浏览器右上角的 按钮 点击 设置 菜单 或直接在地址栏中输入 chrome
  • 解决java.net.BindException: Address already in use(Bind failed)端口占用问题

    sudo lsof i 8080 删掉图中两个进程 kill 9 2960 其中 9是九
  • 分别采用prim算法与kruskal算法构造最小生成树(第一次作业)

    分别采用prim算法与kruskal算法构造最小生成树 1 问题 举一个实例 画出采用Prim算法构造最小生成树的过程 并按实验报告模板编写算法 举一个实例 画出采用Kruskal算法构造最小生成树的过程 并按实验报告模板编写算法 有n个村
  • axios get请求特殊字符编码问题

    这几天在写一个项目 然后就遇到了请求的编码问题 然后在度娘上搜到了答案 请求拦截器配置处理 this axiosInstance interceptors request use config AxiosRequestConfig gt c
  • go换源国内并根据mod文件下载依赖

    go env w GO111MODULE on go env w GOPROXY https goproxy cn direct 根据mod文件下载依赖 此命令需要在go mod同级目录下执行 go mod tidy
  • 做EEG频谱分析,看这一篇文章就够了!

    所谓频谱分析 又称为功率谱分析或者功率谱密度 Power Spectral Density PSD 分析 实际就是通过一定方法求解信号的功率power随着频率变化曲线 笔者在这里对目前常用的频谱分析方法做一个总结 并重点介绍目前EEG分析中
  • Outlook Express 无法连接服务器,错误号:0x800CCC0E

    发送邮件的时候报错 无法发送邮件 显示无法连接到服务器 邮箱为公司外部邮箱 协议 SMTP 端口 25 套接字错误 10060 错误号 0x800CCC0E 含义是 无法连接服务器 请确定一下是否可以正常连接SMTP服务器 一般解决方法是
  • HTTP断点续传原理 状态码206 Partial Content

    HTTP断点续传 断点续传就是从文件上次中断的地方开始重新下载或上传 当下载或上传文件的时候 如果没有实现断点续传功能 那么每次出现异常或者用户主动的暂停 都会去重头下载 这样很浪费时间 所以断点续传的功能就应运而生了 要实现断点续传的功能
  • DVWA全级别通关教程

    首先选择难度 我们从low开始 如上图所示进行修改 目录 SQL手工注入 过程 low Medium high Impossible SQL 盲注 过程 SQL 工具注入 工具安装过程 过程 low Medium High 暴力破解 过程
  • 基于SSM的校园学生管理系统的设计与实现

    全网粉丝20W csdn特邀作者 博客专家 CSDN新星计划导师 java领域优质创作者 博客之星 掘金 华为云 阿里云 InfoQ等平台优质作者 专注于Java技术领域和毕业项目实战 文末获取项目下载方式 一 项目背景介绍 校园学生管理系
  • pc 电商平台----search模块

    目录 vuex中的模块化 Object assign 用法 watch监听 数组方法splice与split splice split 方法 数组去重 自定义分页器 vuex中的模块化 vuex使用三部曲 写请求 页面dispatch派发a