vue+vant 移动端H5 商城项目_01

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章目录

          • 一、·Rem 布局适配
            • 1. 安装 amfe-flexible
            • 2. px转化rem
            • 3. 全局配置
            • 4. 重置样式表
            • 5. 引入重置样式表
          • 二、组件安装和配置与封装
            • 2.1. 安装less 预编译语言
            • 2.2. 安装vant-ui
            • 2.3. 端口自定义配置
          • 三、axios 工具封装
            • 3.1. 下载安装axios
            • 3.2. axios导入
            • 3.3. 创建axios 实例拦截器配置
            • 3.4. 拦截器配置
            • 3.5. 创建请求api
            • 3.6. 跨域代理配置

技术选型

组件版本说明
vue^2.6.11数据处理框架
vue-router^3.5.3动态路由
vant^2.12.37移动端UI
axios^0.24.0前后端交互
amfe-flexible^2.2.1Rem 布局适配
postcss-pxtorem^5.1.1Rem 布局适配
less^4.1.2css编译
less-loader^5.0.0css编译
vue/cli~4.5.0项目脚手架

vue-cli + vant+ less +axios 开发

一、·Rem 布局适配
1. 安装 amfe-flexible

lib-flexible 用于设置 rem 基准值

在main.js 主入口文件引入 amfe-flexible, 它会自动设置html的font-size为屏幕宽度除以10,也就是1rem等于html根节点的font-size。假如设计稿的宽度是750px,此时1rem应该等于75px。假如量的某个元素的宽度是150px,那么在css里面定义这个元素的宽度就是 width: 2rem

进入项目根目录,执行以下命令:

npm i -S amfe-flexible
  • 在public/index.html文件中的head中引入以下适配内容
 <head><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"></head>
2. px转化rem

安装 第三方插件 postcss-pxtorem
会自动将css代码中的px单位根据规则转换成rem 单位

注意: 如果css样式中 有不需要转成rem 的单位,只需将单位写成大写PX 即可。

  • 注意需要安装5.11 版本,否则报错
npm i postcss-pxtorem@5.1.1
3. 全局配置
  • 在项目根目录创建vue.config.js文件,设置如下配置

注意:修改完项目根目录下的配置文件后,一定要重启项目,这样配置文件才生效

module.exports = {lintOnSave: false, // eslint-loader 是否在保存的时候检查css: {loaderOptions: {postcss: {plugins: [// 把px单位换算成rem单位require("postcss-pxtorem")({// 换算的基数 375的设计稿,换算基数就是37.5rootValue: 37.5,selectorBlackList: [".van"], // 要忽略的选择器并保留为px。propList: ["*"], //可以从px更改为rem的属性。minPixelValue: 1 // 设置要替换的最小像素值。})]}}}
}
4. 重置样式表

在src/assets/下面新建css目录,并在css目录下面新增reset.css样式文件
内容容下:

@charset "utf-8";html{background-color:#fff;color:#000;font-size:12px}
body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,legend,input,textarea,button,p,blockquote,th,td,pre,xmp{margin:0;padding:0}
body,input,textarea,button,select,pre,xmp,tt,code,kbd,samp{line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}
h1,h2,h3,h4,h5,h6,small,big,input,textarea,button,select{font-size:100%}
h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif}
h1,h2,h3,h4,h5,h6,b,strong{font-weight:normal}
address,cite,dfn,em,i,optgroup,var{font-style:normal}
table{border-collapse:collapse;border-spacing:0;text-align:left}
caption,th{text-align:inherit}
ul,ol,menu{list-style:none}
fieldset,img{border:0}
img,object,input,textarea,button,select{vertical-align:middle}
article,aside,footer,header,section,nav,figure,figcaption,hgroup,details,menu{display:block}
audio,canvas,video{display:inline-block;*display:inline;*zoom:1}
blockquote:before,blockquote:after,q:before,q:after{content:"\0020"}
textarea{overflow:auto;resize:vertical}
input,textarea,button,select,a{outline:0 none;border: none;}
button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}
mark{background-color:transparent}
a,ins,s,u,del{text-decoration:none}
sup,sub{vertical-align:baseline}
html {overflow-x: hidden;height: 100%;font-size: 50px;-webkit-tap-highlight-color: transparent;}
body {font-family: Arial, "Microsoft Yahei", "Helvetica Neue", Helvetica, sans-serif;color: #333;font-size: .28em;line-height: 1;-webkit-text-size-adjust: none;}
hr {height: .02rem;margin: .1rem 0;border: medium none;border-top: .02rem solid #cacaca;}
a {color: #25a4bb;text-decoration: none;}
5. 引入重置样式表

在src目录下的main.js 文件中, 引入重置样式表,去掉标签的默认样式

  • 引入重置样式表
import '@/assets/css/reset.css'
二、组件安装和配置与封装
2.1. 安装less 预编译语言
npm install less -S
npm install less-loader@5.0.0  -S

编译成css, 在main.js 引入less并使用

import less from 'less'
Vue.use(less)

vue文件中使用案例:

  • 代码中使用
<style lang='less' scoped></style>

注意:此处安装less-loader 版本需是5.x版本,否则报错,默认安装的是最新版本,所以安装需指定版本号

2.2. 安装vant-ui

官网地址: https://vant-contrib.gitee.io/vant/#/zh-CN/

项目目录下安装vant:

npm i vant -S

or

yarn add vant

说明:可以在package.json文件中看到上面效果即安装成功。

  • 在main.js 文件中引入vant 对应的js和css 文件
//导入所有组件。
import Vant from 'vant';
import 'vant/lib/index.css';
Vue.use(Vant);

也可以在对应组件的script标签中按需导入(不推荐,手动引入很麻烦)

import Vue from "vue";
import { Button } from "vant";
import "vant/lib/button/style";
Vue.use(Button);
  • vant ui 测试
    在src下App.vue页面,新增如下内容:
<div class="home"><p>Home组件测试vant组件</p><van-button type="primary">主要按钮</van-button>
</div>

启动项目,即可看到效果

npm run serve

http://localhost:8080/

说明:
1.如果可以正常显示按钮代表vant ui引入成功
2.为了方便临时采用全局导入方案;但是,由于vant宝体积大,项目中期会采用插件刑事自动按需导入

2.3. 端口自定义配置

默认即可
如果想要更改8080端口,可以在根目录下新建 vue.config.js 中:

module.exports = {devServer: {port: 5000}
}
三、axios 工具封装
3.1. 下载安装axios
npm install axios
3.2. axios导入

在src目录下的创建utils目录, 并在utils下创建request.js 文件.

// 导入axios
import axios from 'axios';
3.3. 创建axios 实例拦截器配置

在src/utils/request.js 文件中创建axios实例

// 使用自定义配置新建一个axios 实例,对axios 做一些基础配置
const instance = axios.create({baseURL: 'http://kumanxuan1.f3322.net:8001/',timeout: 5000,headers: { 'X-Custom-Header': 'foobar' }
});
3.4. 拦截器配置

在src/utils/request.js 文件中新增请求拦截器和响应拦截器

// 添加请求拦截器
instance.interceptors.request.use(function (config) {//请求之前执行该函数, 一般在该处设置token let token = localStorage.getItem("token");if (token) {config.headers["token"] = token}// 在发送请求之前做些什么return config;
}, function (error) {// 对请求错误做些什么return Promise.reject(error);
});//响应拦截器
instance.interceptors.response.use(response => {//1.非200响应//2.token过期//3.异地登陆//4.非对象加密的解密return response.data
})
export default instance
3.5. 创建请求api

在src下创建https文件夹,并添加http.js,用于临时存储全部的接口的请求api,为了维护方便,后期会按照模块划分,创建与模块对应的xxx.js。

https/http.js

在src目录下创建https 目录, 目录下创建http.js 文件,该文件主要用来管理所有的http请求的,如下:

// 所有的请求都放在该目录
import instance from "../utils/request";
//首页所有请求
//1. 获取首页数据列表
export function getIndexList() {return instance.get('/index/index')
}//]专题页 Topic
//专题请求 
export function getTopicList(params) {return instance({url: '/topic/list',method: 'get',params})
}//6. 分类页 Category
// 全部分类数据接口
export function GetChannelDataApi(params) {return instance({url: '/api/catalog/index',method: 'get',params})
}
// 获取当前分类数据
export function GetFenleiDataApi(params) {return instance({url: '/catalog/current',method: 'get',params})
}//我的页面 User
//登陆
export function GoLogin(params) {return instance({url: '/auth/loginByWeb',method: 'post',data: params})
}// 搜索页
// 根据关键字搜索接口
export function GetSearchData(params) {return instance.get('/goods/list', {params})
}// 详情页
//根据id查询对应数据接口
export function getDetailData(params) {return instance.get('/goods/detail', {params})
}//详情页相关产品
export function GetGoodsRelatedData(params) {return instance({url: '/goods/related',method: 'get',params})
}// 2.搜索页 SearchPopup
// 历史记录列表和热门搜索列表
export function GetPopupData(params) {return instance({url: '/search/index',method: 'get',params})
}//删除历史记录
export function Clearhistory(params) {return instance({url: '/search/clearhistory',method: 'post',data: params})
}//搜索提示列表
export function GetSearchTipsListData(params) {return instance({url: '/search/helper',method: 'get',params})
}//4.分类数据获取 Channel
export function GetCateGoryData(params) {return instance({url: '/goods/category',method: 'get',params})
}
// 分类页面商品列表请求
export function GetCateGoryList(params) {return instance({url: '/goods/list',method: 'get',params})
}// 获取品牌详情数据列表请求
export function GetBrandList(params) {return instance({url: '/brand/detail',method: 'get',params})
}// 获取分页品牌详情中的产品列表
export function GetBrandListData(params) {return instance({url: '/goods/list',method: 'get',params})
}//购物车页 Cart
// 购物车列表
export function GetCartData(params) {return instance({url: '/cart/index',method: 'get',params})
}
// 加入购物车
export function AddToCart(params) {return instance.post('/cart/add', params)
}// 获取购物车产品数量
export function GetCartCountData(params) {return instance({url: '/cart/goodscount',method: 'get',params})
}// 加入购物车
export function UpdateCartData(params) {return instance({url: '/cart/update',method: 'post',data: params})
}// 删除购物车商品
export function DeleteCartData(params) {return instance({url: '/cart/delete',method: 'get',params})
}// 删除购物车商品
export function DeleteCartData2(params) {return instance({url: '/cart/delete',method: 'post',data: params})
}// 切换购物车商品选中状态功能接口(含全选
export function ToggleCartCheckedData(params) {return instance({url: '/cart/checked',method: 'post',data: params})
}
3.6. 跨域代理配置

根目录下的 vue.config.js 进行配置:

module.exports = {devServer: {port: 8080,proxy: {'/api': {target: "http://kumanxuan1.f3322.net:8001/",pathRewrite: {'^/api': ''}}}}
}

由于配置文件修改了,这里一定要记得重新 npm run serve !!

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

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

相关文章

vue+vant 移动端H5 商城项目_02

文章目录一、路由规划1. 新建路由配置2. 下载vue-router3. 路由注册4. 路由基础配置5. 路由挂载6. AppTabBar7.二、移动端首页2.1.首页效果2.2. 首页接口请求2.3. 首页页面2.4. 首页页面三、首页组件3.1. 轮播图SwiperCom3.2. Grid 居家-志趣组件3.3. 类别页组件3.4. 品牌制造商…

MaxCompute规格详解 让您花更低的成本获得更高的业务价值

精彩视频回看请点击&#xff1a;MaxCompute规格详解 以下为精彩视频内容整理&#xff1a; 在用户使用MaxCompute之前&#xff0c;都会考虑成本和业务两大问题。有些企业处在快速的发展期&#xff0c;在业务上对性能的要求比较高&#xff0c;例如计算业务对资源的需求是弹性的&…

翼方健数邓振:“DRG+AI”助力实现医院精细化管理

日前&#xff0c;第十四届中国医院院长年会在厦门举行&#xff0c;从宏观与微观、管理与学科等不同维度&#xff0c;跟进解读了后疫情时代中国医疗健康行业、中国医院发展的挑战、机遇与对策。 2020年是全面建成小康社会决胜之年&#xff0c;也是“十四五”规划之年。中国医疗…

全自动化虽然还早,但机器人劳力确实越来越便宜了

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 编者按&#xff1a;本文来自爱范儿&#xff0c;作者 吴羚&#xff0c;36氪经授权发布。 电影《终结者&#xff1a;黑暗命运》…

vue+vant 移动端H5 商城项目_03

文章目录一、首页搜索功能1. 搜索页面2. 历史记录和热门搜索组件3. 搜索框提示列表组件4. 综合-价格-分类5. 搜索出的产品展示6. 异常修复7. 路由拦截/路由守卫二、详情页2.1. 效果图2.2. 详情api2.3. 配置路由2.4. 详情页面2.5. 详情页源码技术选型组件版本说明vue^2.6.11数据…

一家典型的云原生企业,如何在创业早期数次“弯道超车”?

作者 | 禾易受访 | 张淼&#xff0c;玩物得志 App CTO来源 | 阿里巴巴中间件引言前几天&#xff0c;阿里云研究员毕玄分享了自己作为阿里云技术人的一个感受&#xff1a;做基础技术的同学&#xff0c;当越来越好地满足了业务发展的诉求后&#xff0c;会发现业务方对基础技术的唯…

“黑天鹅”,正在改变 AI 落地医疗领域的加速度

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 编者按&#xff1a;本文来自微信公众号“极客公园”&#xff0c;作者 在野&#xff0c;36氪经授权转载。 三月中旬&#xff…

vue+vant 移动端H5 商城项目_04

文章目录一、专题页1. 效果图2. 专题api2.Topic.vue 组件3. 专题源码二、分类页2.1. 效果图2.2. 分类api2.3. Category.vue 组件三、购物车页3.1. 效果图3.2. 购物车api3.3. 购物车页面四、我的页4.1. 效果图4.2. 定义api4.3. User.vue五、路由守卫和异常处理5.1. 编写路由守卫…

Azure Arc 正式商用、Power Platform+GitHub 世纪牵手,一文看懂 Ignite 2020

戳 https://t.csdnimg.cn/dRjD 报名每年科技巨头微软举办 Ignite 大会&#xff0c;发布其最新技术、产品、服务和解决方案。今年 Ignite 2020 大会在 9 月 22 日如约而至&#xff0c;除了将线下会议搬到线上外&#xff0c;微软一如既往地推出众多重磅技术&#xff1a;如被福布斯…

战“疫”期,阿里云云效团队在家高效开发实录

【以下内容为分享实录&#xff0c;有删节】 如何解决在家办公时 “团队沟通”和“研发流程”问题 软件研发团队在家办公时&#xff0c;会遇到的两个核心问题&#xff1a;团队沟通和研发流程。因为云效团队原本就分布在多个城市&#xff0c;平时的沟通方式也经常采用“在线会议…

当 Mars 遇上 RAPIDS:用 GPU 以并行的方式加速数据科学

背景 在数据科学世界&#xff0c;Python 是一个不可忽视的存在&#xff0c;且有愈演愈烈之势。而其中主要的使用工具&#xff0c;包括 Numpy、Pandas 和 Scikit-learn 等。 Numpy Numpy 是数值计算的基础包&#xff0c;内部提供了多维数组&#xff08;ndarray&#xff09;这…

vue2.x vant2.x H5 移动端脚手架

文章目录一、前置准备1. 技术选型2. 创建vue项目二、Rem 布局适配2.1. px转rem2.2. 设置 rem 基准值2.3. 配置vue.config.js2.4. 重置样式表2.5. 配置样式表2.6. 安装less2.7. 注册less2.8. 代码中使用三、vant安装/配置/测试3.1. 安装vant-ui3.2. 引入与注册3.3. vant测试四、…

相见恨晚!遗憾仅有不到1% 的人知道

广泛在各领域被应用的数据分析&#xff0c;现在已经是任何岗位任何职业都需要用到的技能。即便不从事职业的数据分析&#xff0c;掌握一定的数据处理能力也将成为你职场中绝对的加分项。为了跟上人才市场的能力需求&#xff0c;许多做技术开发的同学也加入了数据分析的学习热潮…

【机器人】标记不友好评论,AI工作效果是人类的4.4倍

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 不友好的评论对于系统而言是一个大问题&#xff0c;因为他们的语气会影响被评论者和未来读者对 Stack Overflow 的贡献意愿。…

VBA 常用代码及自定义函数备忘

文章目录 1. 函数1.1 Windows API1.1.1 改变当前鼠标指针形状1.1.2 Sleep 程序休眠1.2 自定义函数1.2.1 去除空格1.2.2 测试图片格式1.2.3 获取打印机信息1.2.4 GB/T 8170 修约1.2.5 邮箱格式检查1.2.6 汉字转拼音1.2.7 列标签字母与列序号数值转换1.2.8 大小写金额转换1.2.9 分…

2020年云计算的十大新兴趋

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 人们将在2020年可能会看到一些顶级云计算趋势主题&#xff0c;其中包括人工智能、自动化和多云的更大发展。 随着越来越多的…

各企业正在纷纷向“云”,背后有着哪些原因?

撰者 | Emil Sayegh译者 | Katie&#xff0c;责编 | Jerry来源 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;在全球大流行的初期&#xff0c;各地企业的目标很简单&#xff1a;继续运营。社交隔离要求使得零售&#xff0c;银行&#xff0c;医疗&#xff0c;教…

如何在Java代码中去掉烦人的“!=null”

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 问题 为了避免空指针调用&#xff0c;我们经常会看到这样的语句 if (someobject ! null) {someobject.doCalc(); } 最终&a…

vue TypeError: Cannot read property ‘upgrade‘ of undefined

这个错误的原因是&#xff1a; vue.config.js 中配置的 proxy 中的 target 上设置的 process.env.xxxxx 不存在。