电商平台项目 Vue day2

10 篇文章 2 订阅
订阅专栏

1、注意点:

    编程式导航路由跳转到当前路由(参数不变), 多次执行会抛出NavigationDuplicated的警告错误? [ 即电商平台多次点击搜索,但搜索内容不变时,控制台会报错 ]

 这种异常,对于程序没有任何影响的

为什么会出现这种现象:

由于vue-router最新版本3.5.2,引入了promise,当传递参数多次且重复,会抛出异常,因此出现上面现象,

第一种解决方案:是给push函数,传入相应的成功的回调与失败的回调

goSearch() {
      // 常用:对象传参
      this.$router.push(
        {
          name: "xiangqing",
          params: { keyword: this.keyword },
          query: { id: this.keyword.toUpperCase() },
        },
        //添加下面的成功失败回调(治标不治本方法)
        () => {},
        () => {}
      );
    },

第二种解决方案:直接在router组件里修改push参数,在这个根文件里添加成功失败回调

// 解决header里重复点击push上传时控制面板会飘红的问题,治本
// 直接把header里的修改放到push里,当然,先备份一份先
let originPush = VueRouter.prototype.push

// 重写push
// location告诉原来的push往哪跳, resolve成功时, reject失败时
VueRouter.prototype.push = function(location, resolve, reject) {
    // 如果有成功和失败的返回函数,则使用正常push备份的originPush,
    // 如果没有,则在push备份的originPush上面添加resolve和reject
    if (resolve && reject) {
        originPush.call(this, location, resolve, reject)
    } else {
        originPush.call(this, location, () => {}, () => {})
    }
}

言归正传,day1的时候已经把header和footer两个非路由组件搞定,并实现了组件间的跳转,接下来进行home路由组件的制作。

1、将Home组件的静态组件拆分(拆分成7个组件)

总体步骤:

1.1静态页面(样式)

1.2拆分静态组件

1.3发请求获取服务器数据进行展示

1.4开发动态业务

拆分组件:结构+样式+图片资源

 

(1)、1号组件是三级联动,在多个模块(Home、Search、Detail)中都需要使用,所以把它设成全局组件

  ---全局组件好处:只需要在 main.js注册一次,可以在项目的任意地方使用

1.1、在Home组件里新建TypeNav文件夹存放‘’商品分类导航的对应文件(html、css/less、img)

1.2、注册全局组件

// main.js中,三级联动组件--因为很多组件都用,所以设置成全局组件
import TypeNav from '@/pages/Home/TypeNav'

// 使用三级联动组件 TypeNav. 2个参数(全局组件的名字,哪一个组件)
Vue.component(TypeNav.name, TypeNav)

1.3、注册好了在home组件中使用

<template>
  <div>
    <!-- 使用三级联动全局组件 -->
    <TypeNav></TypeNav>
  </div>
</template>

(2)、相同步骤在Home里拆分其它组件,注意(html、css/less、img)的区分

  ---注意:有的图片地址不对,用Ctrl+h全局替换

overflow:hidden作用是当元素内的内容溢出的时候使它隐藏溢出的部分,

可用于:超出部分隐藏、清除浮动、解决外边距塌陷(父级元素内部有子元素,如果给子元素添加margin-top样式,那么父级元素也会跟着下来,造成外边距塌陷)

(3)、引入、注册、使用(三件套)其余组件【TypeNav在全局引入了,这些则是局部引入】

商品的内容需要从后台获取,可以用PostMan软件测试一下接口能不能连接后台服务器

  ---如果服务器返回200,则代表成功,反之失败

二、axios二次封装(静态页面已经搞好,接下来利用axios向服务器发请求获取数据) 

使用前先在控制台安装axios:

cnpm install --save axios

2.1:在src下创建api文件夹存放axios,src->api->request.js

request.js是创造axios的实例和axios的拦截器以及发送真正的网络请求的地方

axios具体内容可以查看: axios中文文档

import axios from "axios";
//1、对axios二次封装
const requests = axios.create({
    //基础路径,requests发出的请求在端口号后面会跟改baseURl
    //baseURL设置为api,所以所有的请求端口后都会携带/api
    baseURL:'/api',
    //发一个请求如果5s内没响应,那么就请求失败
    timeout: 5000,
})
//2、配置请求拦截器, request就是axios
requests.interceptors.request.use(config => {
    //config内主要是对请求头Header配置
    //比如添加token
    
    return config;
})
//3、配置响应拦截器
requests.interceptors.response.use((res) => {
    //成功的回调函数
    return  res.data;
},(error) => {
    //失败的回调函数
    console.log("响应失败"+error)
    return Promise.reject(new Error('fail'))
})
//4、对外暴露
export default requests;

2.2:接口统一管理

当项目很小时,接口可以放在组件的生命周期中发送请求

当项目很大时,有很多接口,可以把接口放到一起统一管理:

 在api文件夹内创建index.js组件,用于存放所有接口,统一管理

//当前模块,API进行统一管理,即对请求接口统一管理
import requests from "@/api/request";

//首页三级分类接口
export const reqCateGoryList = () => {
    return  requests({
        //因为baseURL里自动携带了/api,所以这里不用加上/api。如果那边没有这边就要加上
        //method指什么请求
        url: '/product/getBaseCategoryList',
        method: 'GET'
    })
}

在main.js里测试一下是否能够成功请求后台数据:

import {reqCateGoryList} from './api'
//发起请求
reqCateGoryList();

404请求失败,跨域了。 

三、跨域问题

两个服务器相互请求,协议、域名、端口号必须一致,不然就是跨域,无法找到对方

 解决方法:cors、jsonp、代理(常用)

 这里使用代理服务器的方法:(在vue.config.js配置,配置完要重启代码)

module.exports = {
    //关闭eslint
    lintOnSave: false,
    devServer: { 
        // development server port 8000
        //port: 8001,
        //代理服务器解决跨域
        proxy: {
            //但在请求路径中发现/api时跳转到后面的代理服务器
            '/api': {
                //提供数据的服务器地址
                target: 'http://gmall-h5-api.atguigu.cn',

            }
        },
    }
}

代理相关看:   webpack官网相关知识解读
网站中的webpack.config.js就是vue.config.js文件。

 四、页面加载进度条

 可以使用nprogress插件来完成,安装完后可以去package.json里确认

cnpm install -save nprogress

安装好后再api的request的响应拦截器使用。先引入,

//---------------无关的代码这里会先去除--------------

//引入进度条
import nprogress from 'nprogress';
//引入进度条样式,想要修改进度条默认样式可以去下面的css里改
import "nprogress/nprogress.css";
//这里使用进度条插件的2个方法,1、start(进度条开始)  2、done(进度条结束)

//2、配置请求拦截器:在发请求前执行
requests.interceptors.request.use(config => {
    //在发请求前开启进度条,的start方法
    nprogress.start();

    return config;
})

//3、配置相应拦截器:在发请求侯执行
requests.interceptors.response.use((res) => {
    //成功的回调函数

    //响应成功,关闭进度条,使用done方法
    nprogress.done()

    return  res.data;
},(error) => {
    //失败的回调函数
    console.log("响应失败"+error)
    return Promise.reject(new Error('fail'))
})

//4、对外暴露
export default requests;

简单来说,先导入进度条插件,在页面加载前使用start方法,结束后使用done方法

五、使用Vuex集中式管理数据 

cnpm install --save vuex@3.6.2                    Vue2要用3版本的,不指定默认安4版本

创建文件夹store -> index.js存放Vuex    【2种形式】(这里不用这种)

//引入
import Vue from 'vue'
import Vuex from 'vuex'
//使用
Vue.use(Vuex)

//对外暴露store的一个实例
export default new Vuex.Store({
    state:{},
    mutations:{},
    actions:{},
    getters:{},
)

如果模块很多就要用到模块化开发,把每个模块的数据单独放一个小仓库,再由store引入

结构
小仓库
小仓库
store大仓库

 设置好Vuex之后需要引入,到mian.js引入和使用,和router步骤一样

//引入Vuex
import store from './store';

new Vue({
    render: h => h(App),
    router,
    //使用Vuex
    store,
}).$mount('#app')

六、动态展示三级联动组件

1、像这种多个地方都需要用到的组件,把它放到components里面(就是那个存放静态组件的那里)

2、在三级联动组件TypeNav里:

export default {
  name:'TypeNav',
  // 组件挂载,向服务器发送请求获取数据
  mounted(){
    //通知Vuex发请求,获取数据,并存储于仓库当中,
    //这里actions取名叫做categorylist,然后去Vuex里配置actions
    this.$store.dispatch('categorylist')
  }

 3、接收TypeNav的请求,并引入之前封装的api

在store文件夹(Vuex)的小仓库home里引入api接口reqCateGoryList,然后在actions里书写业务

//引入api接口
import { reqCateGoryList } from '@/api/index'

//处理actions的地方,可以书写业务逻辑、处理异步
const actions = {
    categorylist() {
        let result = reqCateGoryList()
        console.log(result);
    }
};

 

 咱们这里使用异步来进行,也就是async await

//处理actions的地方,可以书写业务逻辑、处理异步
const actions = {
    async categorylist() {
        let result = await reqCateGoryList()
        console.log(result);
    }
};

通过Vuex原理处理数据

 

//引入api接口
import { reqCateGoryList } from '@/api'
//处理actions的地方,可以书写业务逻辑、处理异步
const actions = {
    // {commit} 是结构赋值
    async categorylist({ commit }) {
        let result = await reqCateGoryList()
        if (result.code == 200) {
            commit('CATEGORYLIST', result.data);
        }
    }
};
//修改数据的地方
const mutations = {
    CATEGORYLIST(state, categorylist) {
        state.categorylist = categorylist
    }
};
//存储数据的地方
const state = {
    categorylist: []
};

4、到TypeNav接收数据

  computed: {
    ...mapState({
      //右侧需要的是一个函数,当使用这个计算属性的时候,右侧会立即执行一次
      //注入一个参数state,即Vuex大仓库里的数据
      categoryList: (state) => state.home.categoryList,
    }),
  },

5、数据有了,把html中的静态内容删掉,用v-for生成

 

至此,动态三级分类搞定 

 

 

 

 

Vue项目中常见问题(8)接口统一管理及解决服务器跨域问题
qq_46368050的博客
05-13 1669
目录 gitee仓库地址:登录 - Gitee.comhttps://gitee.com/CMD-UROOT/sph-project/commits/master 1.在src下的api中新建一个index.js文件,对API进行统一管理 2.我们在src/index.js中对API进行统一管理 3.在main.js入口文件中测试一下 4.在控制台Network中查看 5.分析:为什么404? 6.到底什么是跨域呢? 7.那么怎么去解决跨域问题呢? 7.1我们用代理的方法来解决一下跨域..
中文汉字码表
热门推荐
weixin_38871988的博客
09-08 6万+
[PAD] [unused1] [unused2] [unused3] [unused4] [unused5] [unused6] [unused7] [unused8] [unused9] [unused10] [unused11] [unused12] [unused13] [unused14] [unused15] [unused16] [unused17] [unused18] [unused19] [unused20] [unused21] [unused22] [unused23] [unuse
Vue电商平台项目(4)
qq_45330080的博客
08-28 503
Vue电商平台项目(4)
尚品汇api(后台)接口文档
薛定谔的猫
05-02 1461
"skuDesc": "主体\n入网型号\nA2223\n品牌\nApple\n产品名称\niPhone 11\n上市年份\n2019年\n上市月份\n9月\n基本信息\n机身颜色\n红色\n机身长度(mm)\n150.9\n机身重量(g)\n194\n机身材质工艺\n以官网信息为准\n机身宽度(mm)\n75.7\n机身材质分类\n玻璃后盖\n机身厚度(mm)\n8.3\n运营商标志或内容\n无","props": ["1:1700-2799:价格", "2:6.65-6.74英寸:屏幕尺寸"],
B站尚硅谷---vue2实战项目《尚品汇》---第二天
m0_64804076的博客
12-02 510
B站尚硅谷---vue2实战项目《尚品汇》---第二天
仿电商平台vue项目
06-30
vue实现电商平台,有购物车等功能
基于Vue的完整电商系统
01-10
基于SpringBoot+MyBatis实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营...
基于Python与Vue电商平台源码
最新发布
03-25
项目概述:基于Python与Vue.js电商平台源码 技术栈:本项目主要采用Python作为后端开发语言,辅以Vue.jsJavaScript、HTML等前端技术。 文件构成:项目共包含388个文件,具体分布如下: - 图片资源:包含139个...
vue电商项目.rar
10-21
vue电商项目前端技术运用了vue.js,路由导航守卫,路由懒加载,组件模块化开发,axios异步发送请求,element-UI页面布局,echarts图表制作等,后台使用Node.js,Express,Jwt (模拟session),Mysql,Sequelize ...
vue尚硅谷前端项目学习第4个坑和解决方法---连接服务器获取数据
weixin_45128912的博客
05-16 289
在教学视频中老师演示的服务器,到了我学习的时间点已经失效了 然后有新的接口地址,我是以为点击这个地址能进入一个页面,里面是全新的接口数据 没想到。。。要拼接!!!! 是将 http://gmall-h5-api.atguigu.cn 取代 http://39.98.123.211 并且视频底下又给了一个最新的接口地址 非常感谢群里的伙伴引导我 成功拿到数据 ApiPost测试 ...
封装Ajax请求以及Vuex实现模块化管理
weixin_47936649的博客
08-03 276
封装Ajax请求以及Vuex实现模块化管理
① 尚品汇的前台开发笔记【尚硅谷】【Vue
不爱吃菜的菜菜的博客
09-03 3397
尚品汇的前台开发笔记【尚硅谷】【Vue】整理的笔记,为简历做准备ing
Vue2项目(尚品汇前台)】(二)Home首页模块搭建
matmacchiato的博客
01-17 663
防抖(回城技能)前面的所有的触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说如果连续快速的触发,只会执行一次(简单来说就是回城技能)} , 1000)节流(回城cd)在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发} , 1000)lodash插件中封装了防抖与节流的业务【闭包+延迟器】
尚品汇——Vue项目开发笔记
qq_44280090的博客
05-31 2018
项目是基于Vue的组件式开发的电商管理平台的项目,记录了开发过程中用到的技术以及开发步骤,开发笔记,记录肯定会有缺陷,内容不保证百分百正确,仅供参考!
电商项目相关笔记
wsssq_的博客
05-17 334
项目相关笔记
Gmail API 对接问题汇总
Dean's Blog
03-20 2501
Gmail接口对接
gmail api_使用Gmail JavaScript API发送电子邮件
02-15 1293
gmail api 本文由Simon Codrington同行评审。 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态! 在上一篇文章中 ,我演示了如何使用Gmail JavaScript API构建基本的Gmail收件箱和邮件查看应用程序。 今天,我将使用Gmail强大的后端通过电子邮件发送功能来增强该应用程序。 最后,我们将提供一个可定制的应用程序,该应用程序可以...
Vue2电商前台项目(二):完成Home首页模块业务
weixin_42044763的博客
09-09 9113
1、actions执行的时候,要通过api里面的接口函数调用,向服务器发请求,获取服务器的数据,需要把之前的api引入进来,在这里发请求就是要调用这个reqCategoryList函数,如果请求成功(code===200),那么把数据交给mutations进行处理。防抖:前面的所有的触发都被取消,最后一次执行在规定的事件之后才会触发,也就是说如果连续的快速触发,只会执行一次 ----------------------当事件被触发后,延迟 n 秒后再执行回调,返回的是一个函数。
base URL是什么意思?干什么用的?
xiaozhupiggg的专栏
06-15 1万+
http://wenda.tianya.cn/wenda/thread?tid=3bb3c0257a9316c0 
vue koa2 电商实战项目
09-02
你好!关于 Vue 和 Koa2 的电商实战项目,我可以为你提供一些指导和建议。首先,你可以按照以下步骤进行开发: 1. 确定项目需求:明确电商项目的功能和特点,例如用户注册、登录、商品展示、购物车、订单管理、支付等。 2. 搭建前端框架:使用 Vue.js 搭建用户界面,可以选择使用 Vue CLI 来快速创建项目。 3. 设计数据库:根据项目需求,设计数据库结构,包括用户信息、商品信息、购物车、订单等。 4. 搭建后端服务:使用 Koa2 框架来搭建后端服务,处理前端发送的请求,与数据库进行交互。 5. 开发接口:根据前端的需求,编写相应的接口,提供数据的增删改查功能。 6. 实现用户认证:使用 JWT 或其他认证方式来实现用户注册、登录等功能,并验证用户的身份。 7. 构建商品展示页面:根据数据库中的商品信息,展示商品列表,并提供搜索、筛选等功能。 8. 实现购物车功能:用户可以将商品加入购物车,修改购物车中的商品数量,生成订单等。 9. 处理支付功能:集成第三方支付平台,处理用户的支付请求并生成订单。 10. 完善订单管理:实现订单列表、订单详情、订单状态管理等功能。 以上是一个基本的开发流程,当然具体实现还需根据项目需求进行调整和补充。在开发过程中,你可以参考一些相关的文档或教程,比如 Vue 官方文档、Koa2 官方文档、以及一些电商实战项目的教程和示例代码,可以帮助你更好地理解和实践这个项目。 祝你顺利完成电商实战项目的开发!如果你还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 电商平台项目 Vue day7 详情页开发 1279
  • potplayer播放器实现人声增强 1112
  • ...mapState和 ...mapGetters的区别 1039
  • 电商平台项目 Vue day1 705
  • 电商平台项目 Vue day2 382

分类专栏

  • 电商平台 10篇
  • 技能分享 1篇
  • vue 1篇

大家在看

  • 【C++练级之路】【Lv.24】异常 1304
  • 【MySQL】函数
  • 浔川画板v2.0——浔川python社
  • 【机器学习基础】Python编程07:五个实用练习题的解析与总结 963
  • git clone出现fatal: unable to access: SSL certificate problem: certificate has expired的解决方案 5524

最新文章

  • Vue3学习笔记
  • 电商平台项目 Vue day10
  • 电商平台项目 Vue day9
2023年5篇
2022年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码东莞营销型网站建设哪家好平凉英文网站建设报价兰州关键词排名哪家好韶关网络广告推广价格宿迁网站搭建报价那曲网站排名优化报价河池网站推广方案公司长沙网络广告推广报价哈密百度seo多少钱宜宾SEO按效果付费公司孝感优秀网站设计多少钱雅安SEO按天收费多少钱呼和浩特网络广告推广哪家好漳州至尊标王报价周口关键词按天扣费多少钱佛山建设网站公司塔城品牌网站设计推荐重庆建站多少钱长春至尊标王哪家好达州网站改版价格定西网站设计模板报价福永网站优化按天扣费公司鹤壁百度爱采购价格张家口网络营销广州seo价格枣庄至尊标王报价固原品牌网站设计多少钱徐州关键词按天收费价格黄冈百姓网标王价格铁岭网站开发推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化