用vue3+vant4开发的简单小众电商购物项目模板(纯前端)

news2024/11/19 17:30:12

简单录制如下

请添加图片描述

主要练习下界面和交互,顺带简单了解下 vue3 语法。

简单截图如下

首页

在这里插入图片描述

首页-猜你喜欢

在这里插入图片描述

分类

在这里插入图片描述

购物车

在这里插入图片描述

个人页面

在这里插入图片描述

部分文件代码

底部导航文件

<template>
  <div class="nav" id="myNav">
    <div
      class="nav-item-box"
      v-for="(item,index) in itemArr"
      :key="index"
    >
    <!-- :class="item.title == '书架' ? 'bookshelf_nav' : ''" -->
      <div
        class="nav-item"
        :style="name == item.navName ? 'color:rgb(255,63,63)' : ''"
        @click="to(item.navName)"
      >
        <div class="icon">
          <i :class="item.icon"></i>
        </div>
        <div class="title">{{item.title}}</div>
      </div>
    </div>
  </div>
</template>

<script>
/* eslint-disable */
import { defineComponent, ref, computed } from 'vue'
import { useRouter,useRoute } from 'vue-router'

export default defineComponent({
  setup() {
    let itemArr = ref([
      { title: '首页', navName: 'Index', icon: 'iconfont icon-shouye' }, 
      { title: '分类', navName: 'Classification', icon: 'iconfont icon-fenlei'},  
      { title: '购物车', navName: 'ShoppingCart', icon: 'iconfont icon-gouwuche' }, 
      { title: '我的', navName: 'Mine', icon: 'iconfont icon-wode' }, 
    ])

    let router = useRouter() // 全局路由对象
    let route = useRoute()   // 当前路由对象

    let name = computed(() =>{
      return route.name
    })

    let to = (val) =>{
      if (val != name.value){
        router.replace({
          name: val
        })
      }
    }
    return {
      itemArr,
      name,
      to
    }
  }
})
</script>

分类功能模块

<div class="content_container">
  <!-- 左侧 -->
  <div class="left_box">
    <div v-for="(item,index) in leftList" :key="index">
      <div :class="curNav.index == item.index ? 'active' : '' " class="left_box_title" @click="changeIndex(index)">{{item.title}}</div>
    </div>
  </div>

  <!-- 右侧 -->
  <div>
    <van-list
      v-if="curNav.index ==0"
      class="right_box"
      v-model:loading="loading"
      :finished="finished"
      finished-text="没有更多了"
      @load="onLoad"
    >
      <div v-for="item in list" :key="item" class="right_good">
        <div class="img "><img class="img" :src="item.src" alt=""></div>
        <div class="name">{{item.title}}</div>
      </div>
    </van-list>
    <div v-if="curNav.index !=0">
      <van-empty image="error" description="暂无数据" />
    </div>
  </div>
</div>
<script>
/* eslint-disable */
import { defineComponent, ref } from 'vue'
import { showToast } from 'vant';
import navCom from '@/components/onlineRetailer/MyNav.vue'

export default defineComponent({
  name: 'headerCom',
  components: {
    navCom
  },
  setup (props,ctx) {
    let value = ref('')
    let active = ref(0);
    // let onChange = (index) => showToast(`标签名 ${index + 1}`);
    // let onChange = (index) => {
    //   switch(index){
    //     case 0: showToast('1111111111111')
    //     break;
    //     case 1:  showToast('222222222222')
    //     break;
    //     default:  showToast('6666666666666')
    //   }
    // }
    let leftList = ref([
      { index: 0, title: "好货推荐" },
      { index: 1, title: "彩妆个护" },
      { index: 2, title: "食品饮料" },
      { index: 3, title: "鞋履箱包" },
      { index: 4, title: "母婴用品" },
      { index: 5, title: "生活家居" }
    ])
    let rightList = ref([
      { title: '麦菜' },
      { title: '芥兰' }
    ])

    let list = ref([
      { title: '坚定不移', src: require('@/assets/newProducts/2.jpg')},
      { title: '壮志凌云', src: require('@/assets/newProducts/1.jpg')},
      { title: '奋发图强', src: require('@/assets/newProducts/3.jpg')},
      { title: '坚持不懈', src: require('@/assets/newProducts/4.jpg')},
      { title: '朝气蓬勃', src: require('@/assets/newProducts/5.jpg')},
      { title: '力争上游', src: require('@/assets/newProducts/6.jpg')},
      { title: '坚定不移', src: require('@/assets/newProducts/2.jpg')},
      { title: '壮志凌云', src: require('@/assets/newProducts/1.jpg')},
    ]);
    let loading = ref(false);
    let finished = ref(false);
    let curNav = ref({
      index: 0, 
    })

    let changeIndex = (index) =>{
        curNav.value.index = index
    }

    let onLoad = () => {
      // 异步更新数据
      // setTimeout 仅做示例,真实场景中一般为 ajax 请求
      // setTimeout(() => {
        // for (let i = 0; i < 6; i++) {
        //   list.value.push(list.value.length + 1);
        // }

        // 加载状态结束
        loading.value = false;

        console.log('list.value.length',list.value.length)

        // 数据全部加载完成
        if (list.value.length >= 20) {
          finished.value = true;
        }
      // }, 1000);
    };

    return {
      value,
      active,
      // onChange,
      leftList,
      rightList,
      list,
      onLoad,
      loading,
      finished,
      curNav,
      changeIndex
    }
  }
})
</script>

简单记录,(完)😀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle VM VirtualBox  VMware下载使用教程

一、Oracle VM VirtualBox 使用教程官网&#xff08;https://www.virtualbox.org/wiki/Downloads&#xff09;下载安装包&#xff0c;此处选择下载的为windows版本点击安装包&#xff0c;进行安装新建虚拟机name&#xff1a;自定义虚拟机名称Folder&#xff1a;安装文件夹ISO I…

postgres源码解析48 Btree节点分裂点确认流程--1

由于Btree数据结构特性&#xff0c;当节点达到上溢条件时会发生分裂&#xff0c;进而保持Btree的原本特性 B树 详解及C语言简单实现&#xff0c;在之前的postgres 源码解析 45 btree分裂流程_bt_split已对分裂流程进行讲解&#xff0c;接下来将从源码角度学习postgres btree分裂…

揭密Realtek 致命漏洞:超过 1 亿次尝试破解物联网设备

国际知名白帽黑客、东方联盟创始人郭盛华警告说&#xff0c;自 2022 年 8 月开始&#xff0c;利用 Realtek Jungle SDK 中现已修补的关键远程代码执行漏洞进行攻击的攻击企图激增。 据郭盛华透露&#xff0c;截至 2022 年 12 月&#xff0c;正在进行的活动据称已记录了 1.34 亿…

前端sdk - 埋点

目录前端sdk 之小满np安装01 搭建环境01-项目目录01-2 依赖包01-3 rollup.config.js01-4 tsconfig.json 28行01-5 package.json01-6 src / core / index.ts01-7打包效果02 初始化 Tracher02-1 core / index.ts02-2 types/ index.ts03 重写history事件 监听history | hash 路由等…

【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战

文章目录前言I、微服务与Spring CloudII、Nacos 注册中心III、Spring Cloud Alibaba Nacos 实战1、新建父工程2、新建demo-a 服务3、新建 demo-b 服务4、实现服务调用&#xff1a;传统方式5、实现服务调用&#xff1a;NacosRibbon方式总结最后前言 Spring Cloud Alibaba微服务…

JS 设计模式(2)-- 复习

目录 策列模式 代理模式 观察者模式 发布订阅模式 模块模式 策列模式 策略模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使他们可以相互替换&#xff0c;且算法的变化不会影响使用算法的用户&#xff0c;策列模式属于对象行为模式&#xff0c;它通过…

Java面试题(自用-持续更新)

本文目录如下&#xff1a;Java面试题一、基础知识JDK 和 JRE 有什么区别&#xff1f;String 属于基础的数据类型吗&#xff1f;基础类型有哪些?String str"xqz"与 String strnew String("xqz")一样吗&#xff1f;java 中操作字符串都有哪些类&#xff1f;…

王佩丰 Excel 基础24讲 | 学习笔记(全)

第一讲&#xff1a;认识Excel 1.简介 excel能做什么&#xff1f; 数据存储 → 数据处理 → 数据分析 → 数据呈现 excel界面 补充&#xff1a;Excel数据分析步骤 ①提出问题&#xff1a;明确自己需要通过数据分析解决什么问题 ②理解数据&#xff1a;理解数据各个字段的含义…

【手写 Promise 源码】第十五篇 - 了解 generator 生成器

一&#xff0c;前言 上一篇&#xff0c;实现了 promisify 和应用场景介绍&#xff0c;主要涉及以下几个点&#xff1a; promisify 简介和测试&#xff1b;promisify 功能的实现&#xff1a;promisify、promisifyAll&#xff1b; 目前&#xff0c;Promise 部分已基本完成&…

FPGA实现图像任意位置显示,串口协议控制显示位置,提供工程源码和技术支持

目录1、图像任意位置显示理论基础2、设计思路和架构3、OV5640图像采集4、图像DDR3三帧缓存5、图像任意位置输出显示6、串口协议控制显示位置7、vivado工程介绍8、上板调试验证9、福利&#xff1a;工程源码获取1、图像任意位置显示理论基础 图像任意位置显示指的是在显示屏上的…

Linux新手渣渣上路史

时至2022年&#xff0c;IT行业的迅速发展大家也有目共睹&#xff0c;IT行业在社会的发展中起着举足轻重的作用。其中一角Linux系统&#xff0c;从诞生到开源&#xff0c;再到现在受大众的欢迎&#xff0c;是一个很好的例子。Linux和windows类似&#xff0c;是一个操作系统&…

java 微服务高级之分布式事务 Seata框架 CAP定理 BASE理论 XA模式 AT模式 TCC模式 SAGA模式

分布式事务问题 1.1.本地事务 1.2.分布式事务 一旦有一个失败了&#xff0c;其他两个不知情失败的情况&#xff0c;还是执行并成功 在分布式系统下&#xff0c;一个业务跨越多个服务或数据源&#xff0c;每个服务都是一个分支事务&#xff0c;要保证所有分支事务最终状态一致…

【JavaEE】线程安全的集合类

引言 在Java标准库中&#xff0c;大部分集合类都是线程不安全的。Vector(比ArrayList多了同步化机制就变得线程安全了)&#xff1b;Stack(继承Vector)&#xff1b;Hashtable(只比Hashmap多了线程安全)&#xff1b;以Concurrent开头的集合类&#xff1a;ConcurrentHashMap、Con…

Echarts 用图形纹理来填充颜色(color - pattern)

第006个点击查看专栏目录在上一篇文章中已经讲过 ECharts线性渐变色示例演示&#xff08;2种渐变方式&#xff09;&#xff0c;这个示例的颜色使用纹理来做填充&#xff0c;纹理填充&#xff1a; pattern color:{ //纹理填充 image: patternImg, repeat: ‘repeat’ } 示例效果…

禾川HCQ ModBUS+485主从站调试

硬件&#xff0c;485转usb&#xff0c;如果主站是plc&#xff0c;不需要这个线&#xff0c;我现在主站是电脑&#xff0c;调试用。 HCQ0 禾川控制器。 软件 modbus tools 调试软件&#xff0c;自行下载吧&#xff0c;社区传不上去。 硬件连接时注意交叉连接&#xff0c;HCQ0 A端…

MATLAB 逻辑数组

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Java⽇志框架学习笔记

目录 1.⽇志概述 1.1 ⽇志是⽤来做什么的&#xff1f; 1.2 为什么要⽤到⽇志框架&#xff1f; 1.3 现有的⽇志框架有哪些&#xff1f; 1.4 ⽇志⻔⾯技术 2.logback 2.1 logback介绍 2.1.1 logback 模块 2.1.2 logback 组件 2.1.3 logback 配置 2.1.4 logback.xml 配…

2023网络爬虫 -- 获取动态数据

一、网站的正常界面1、网址https://movie.douban.com/typerank?type_name%E5%8A%A8%E4%BD%9C%E7%89%87&type5&interval_id100:90&action2、正常的页面二、爬取数据1、源代码import requests头{"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64…

首屏加载速度慢怎么解决?

一、什么是首屏加载 首屏时间&#xff08;First Contentful Paint&#xff09;&#xff0c;指的是浏览器从响应用户输入网址地址&#xff0c;到首屏内容渲染完成的时间&#xff0c;此时整个网页不一定要全部渲染完成&#xff0c;但需要展示当前视窗需要的内容 首屏加载可以说是…

分享156个ASP源码,总有一款适合您

ASP源码 分享156个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 156个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Mc-zWjUyk9Lx8TXv5cvZTg?pwds2qi 提取码&#x…