当前位置: 首页 > news >正文

vue实战-Search模块开发(大体步骤)

vue实战-Search模块开发

1.先静态页面+静态组件拆分

2.发请求(API)

在接口统一管理的index.js中添加搜索模块的接口

//搜索组件的接口
export const reqGetSearchInfo = (params) =>{
    return requests({url:'/list',method:'post',data:params})
}

3.vuex(三连环)

1)向服务器发请求获取数据

原先:

mounted(){
      this.$store.dispatch('getSearchList',{})
    },

由于组件挂载完毕执行一次【只执行一次】,当再次传参发请求时,不能再派发action改变仓库的值,这不符合搜索模块的特性,于是将触发请求的语句封装为一个函数,需要时调用即可。
②传递的参数也要传给服务器用于筛选,不能只是空对象,可以在data中设置需要传递的值,将路由传递的参数动态的传递到data中的对象中,然后再发送给服务器,服务器返回符合的数据入仓库。于是需要在挂载调用派发actions时,就得将data中的对象确定好,可以用在生命周期mounted之前的beforeMount,或者beforeCreate。
最终:

data() {
      return {
        searchParams:{
          "category1Id": "",
          "category2Id": "",
          "category3Id": "",
          "categoryName": "",
          "keyword": "",
          "order": "",
          "pageNo": 1,
          "pageSize": 3,
          "props": [],
          "trademark": ""
        }
      }
    },
    beforeMount(){
      Object.assign(this.searchParams,this.$route.query,this.$route.params)
    },
    mounted(){
      this.getData()
    },
     computed:{
      ...mapGetters([ 'goodsList' ])
    },
    methods: {
      getData(){
        this.$store.dispatch('getSearchList',this.searchParams)
      }
    },

2)search模块下的仓库

//search下的小仓库
import { reqGetSearchInfo } from "@/api"
const state={
    searchList:{}
}
const mutations={
    GETSEARCHLIST(state,searchList){
        state.searchList = searchList
    }
}
const actions={
    async getSearchList({commit},params={}){
        const result = await reqGetSearchInfo(params)
        if(result.code == 200){
            commit('GETSEARCHLIST',result.data)
        }
    }
}
const getters={
//这个state是search下小state
    goodsList(){
        return state.searchList.goodsList || []//防止没网时返回undefined
    },
    attrsList(){
        return state.searchList.attrsList
    },
    trademarkList(){
        return state.searchList.trademarkList
    }
}

export default {
    state,
    mutations,
    actions,
    getters
}

4.组件获取仓库数据,动态展示数据

1)组件获取仓库数据

根据仓库里的计算方法getters简化组件数据
首先在Search下引入

import { mapGetters } from 'vuex'

获取计算属性得到的值用数组表示

computed:{
      ...mapGetters([ 'goodsList','attrsList','trademarkList' ])
    }

2)动态展示数据

 <div class="goods-list">
            <ul class="yui3-g">
              <li class="yui3-u-1-5" v-for="good in goodsList" :key="good.id">
                <div class="list-wrap">
                  <div class="p-img">
                    <a href="item.html" target="_blank">
                      <img :src="good.defaultImg" />
                    </a>
                  </div>
                  <div class="price">
                    <strong>
                      <em>¥</em>
                      <i>{{good.price}}.00</i>
                    </strong>
                  </div>
                  <div class="attr">
                    <a target="_blank" href="item.html" title="促销信息,下单即赠送三个月CIBN视频会员卡!【小米电视新品4A 58 火爆预约中】">{{good.title}}</a>
                  </div>
                  <div class="commit">
                    <i class="command">已有<span>2000</span>人评价</i>
                  </div>
                  <div class="operate">
                    <a href="success-cart.html" target="_blank" class="sui-btn btn-bordered btn-danger">加入购物车</a>
                    <a href="javascript:void(0);" class="sui-btn btn-bordered">收藏</a>
                  </div>
                </div>
              </li>
            </ul>
          </div>

相关文章:

  • C#基础--特殊的集合
  • 吴恩达2022机器学习_第二部分高级学习算法笔记
  • DGL教程
  • FAST-LIO2代码解析(五)
  • 苦卷28天,阿里P8给我的Alibaba面试手册,终于成功踹开字节大门
  • Vue:v-on、v-bind、v-model、@click、:model用法以及区别(附代码实例)
  • 手写Sping IOC(基于Setter方法注入)
  • 一、SpringBoot前置(从0搭建Maven项目)
  • 宝藏教程:超详细一条龙教程!从零搭建React项目全家桶
  • 网络编程学习总结3
  • 欧姆龙CP1H如何进行PLC远程编程及数据采集
  • CSGO Bway电竞ETERNAL FIRE可以参加BLAST FALL,但MOUZ却错过了
  • 收获tips
  • Vue3+elementplus搭建通用管理系统实例十二:使用通用表格、表单实现对应功能
  • 抖音根据关键词取视频列表 API 返回值说明
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Codepen 每日精选(2018-3-25)
  • css选择器
  • Invalidate和postInvalidate的区别
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java-详解HashMap
  • php ci框架整合银盛支付
  • vue-loader 源码解析系列之 selector
  • 对象管理器(defineProperty)学习笔记
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 理解在java “”i=i++;”所发生的事情
  • 浏览器缓存机制分析
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 配置 PM2 实现代码自动发布
  • 前端学习笔记之观察者模式
  • 前端之React实战:创建跨平台的项目架构
  • 使用putty远程连接linux
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我与Jetbrains的这些年
  • 由插件封装引出的一丢丢思考
  • Mac 上flink的安装与启动
  • ${factoryList }后面有空格不影响
  • (02)vite环境变量配置
  • (4) PIVOT 和 UPIVOT 的使用
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (六)Hibernate的二级缓存
  • (万字长文)Spring的核心知识尽揽其中
  • (转)创业家杂志:UCWEB天使第一步
  • (转)我也是一只IT小小鸟
  • .net mvc 获取url中controller和action
  • .net 程序发生了一个不可捕获的异常
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net下的签名与混淆
  • @Query中countQuery的介绍
  • [20190401]关于semtimedop函数调用.txt
  • [Android Pro] AndroidX重构和映射