Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
vue 购物网站_vue商城模板,希望能够帮助你!!!。
关注一下公众号「代码行间」,回复「商城」可以获取代码~
vue create hk-shop
什么是FastClick?
① FastClick 是一个简单易用的库,它消除了移动端浏览器上的物理点击和触发一个 click 事件之间的 300ms 的延迟 ;
② 目的就是在不干扰你目前的逻辑的同时,让你的应用感觉不到延迟,反应更加灵敏;
③ 实现原理: 在检测到touchend事件的时候,会通过DOM自定义事件立即出发模拟一个click事件,
并把浏览器在300ms之后真正的click事件阻止掉。
为什么会存在延时?
① 移动端浏览器会从你点击按钮之后,等待大约 300ms 才会触发点击事件
② 原因是浏览器会等待看你的行为是否会是双击
配置方法
① 将fastclick拉取到项目中 npm i fastclick -S
② 配置方案
Ⅰ直接在main.js中进行配置
main.js
// 1. 引入FastClick import FastClick from 'fastclick' // 2. 配置FastClick if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function () {
FastClick.attach(document.body); }, false); }
Ⅱ 在plugin文件夹中新建FastClick.js并在其中配置,并将其在main.js中引入
安装vant npm i vant –S
安装babel-plugin-impor支持vant局部引用 npm i babel-plugin-import -D
在babel.config.js中进行配置
在plugins文件夹下,新建vant.js。配置引入不同的vant组件。
在main.js中引入vant.js。需要引入什么组件直接在vant.js中做修改即可。
直接借助官网API快速引入组件
安装axios npm i axios -S
,并且封装axios网络请求
在service文件夹中,新建子文件夹api,并在api中新建文件index.js。负责汇总各种接口。
在api文件夹中新建ajax.js
在ajax.js中封装axios网络请求,并以函数ajax的形式向外界暴露
在index.js中,从ajax.js中引入ajax方法
在index.js中,定义接口基础路径
在index.js中,定义getHomeData方法,该方法是请求主页的数据,为get方法,拼接完整URL调用ajax方法发起axios的get请求,并向外界暴露该方法。
在Home.vue中,引入数据请求方法,并在创建组件完成后的created钩子选项中发起ajax请求。
在home文件夹内,新建子文件夹components,存放home.vue的子组件
在子文件夹components中新建header文件夹,在header文件夹内新建Header.vue组件
在Header.vue中将写好的html即样式拷贝过来
在Home.vue中引入组件Header.vue
vue-awesome-swiper
实现)在home子文件夹components内新建子文件夹sowing,并在sowing文件夹中新建Sowing.vue
安装vue-awesome-swiper npm install
配置轮播图
注意:
① 下载最新版本的vue-awesome-swiper可能按照官方文档有些功能无法使用,可以直接下载低版本
② 配置分页、自动播放等功能无效的话,引入的时候加入以下代码。其他功能无效也可以试一下这个。
import Swiper2, {
Navigation, Pagination, Autoplay} from 'swiper'; Swiper2.use([Navigation, Pagination, Autoplay]);
如果想在组件中使用或者控制轮播图,可以在监听computer中对swiper进行监听,并在组件的其他地方使用。
将首页的数据传输到轮播图组件中,并进行渲染
在home子文件夹components内新建子文件夹nav,并在nav文件夹中新建Nav.vue
将静态界面放在Nav.vue中,并在Home.vue中引入
将Home.vue中请求到的数据通过props传递到Nav.vue,并进行遍历展示
在home子文件夹components内新建子文件夹flashSale,并在flashSale文件夹中新建FlashSale.vue和FlashSaleItem.vue
将静态界面放在FlashSale.vue和FlashSaleItem.vue中,并在FlashSale中引入FlashSaleItem,在Home.vue中引入FlashSale
在home子文件夹components内新建子文件夹youLike,并在youLike文件夹内新建YourLike.vue和YourLikeItem.vue
将静态界面放在YourLike.vue和YourLikeItem.vue中,并在YourLike中引入YourLikeItem,在Home.vue中引入YourLike
将Home.vue中请求到的数据通过props传递到YourLike.vue,再传递到YourLikeItem.vue,并进行遍历展示
在home子文件夹components内新建子文件夹markPage,并在markPage文件夹内新建MarkPage.vue
将返回顶部SVG静态页面放到MarkPage.vue中,并在Home.vue中引入
在父组件Home.vue中定义事件,并以props的方式传递给MarkPage.vue。并通过属性showBackStatus控制MarkPage是否显示。
判断是否显示返回顶部按钮是一个可能全局都要使用的事件。所以将其抽出来。
① 在config文件夹中,新建global.js
② 在global.js中写滚动、触摸监听代码,并在满足条件的时候执行回调函数。
③ 在Home.vue中,引入global.js,并在created钩子中进行监听,通过判断是否需要显示返回顶部按钮,设置showBackStatus值,控制是否需要显示。
④ 在global.js中,写缓动函数
⑤ 在Home.vue中引入animate动画,并在点击事件中调用。
新建一下文件目录,并在对应子文件下新建vue组件
async 和 await
将异步函数转化为同步函数执行后续操作左侧推荐导航栏基本没有扩展性,直接在Catergory.vue中写即可。同时,借助better-scroll进行滚动。
对请求下来的数据进行遍历,动态加载渲染左侧li标签
处理左侧推荐导航栏点击事件
① 导航栏样式处理
选中样式绑定在selected类上,通过对不同li标签删除添加class为selected即可实现更换
样式
通过给li标签绑定点击事件,更改currentIndex
来更改当前具有selected类名的li标签,同时借助better-scroll中的控制滚动位置,同时,获取新的右侧数据
③ 与右边联动展示
将ContentView静态界面和ProductItem静态界面放到对应vue中,并在ContentView.vue中引入ProductItem.vue,在Category.vue中引入ContentView.vue
将Category.vue中请求到的数组传递到子组件中,并进行v-for显示即可
3. 如果想按照价格排序,可以定义一个新的数组,存储
在store中新建index.js,并在main中引入
在store文件夹下新建state.js(数据)、mutations(同步操作)、mutations-type(约束名称)、actions(异步操作)、getters(与state中数据相关的计算属性)。将vuex进行拆分。
并在index.js中进行汇总输出
在state.js中定义购物车商品对象
在mutations-type中定义方法名称
在mutations中实现添加方法
在界面上进行操作,调用ADD_GOODS添加商品方法
① 向购物车中添加的事件很多地方都要调用,因此借助消息订阅(pubsub-js),在组件中跨级通信。
② 安装pubsub-jsnpm install pubsub-js -S
③ 在Home.vue中,监听添加到购物车消息
④ 在YourLikeItem.vue中发布消息
⑤ 其他需要添加到购物车的地方操作相同
利用计算属性,通过shopCart中checked为true的数据,计算商品总价
通过计算属性,计算选中的商品数量
在mutations中定义清空购物车方法
在Cart.vue中引入并使用清空购物车方法
填写订单界面应该是和dashboard平行的,所以在views目录下新建order子文件夹,并在order文件夹下新建Order.vue
在router文件夹内的index.js中配置路由
在购物车中点击去结算的时候,转到订单界面
将去结算的a标签改为router-link
标签,并用tag标识其原本标签名,并用to表示其跳转路由
引入NavBar实现导航栏
① 在vant.js中引入NavBar
② 在Order.vue中进行引入配置
引入ContactCard 实现收货地址
① 在vant.js中引入ContactCard
② 在Order.vue中进行引入配置
在order文件夹下,新建children文件夹,children文件夹下新建MyAddress.vue
配置路由
在我的订单中,实现点击选择收货地址跳转路由
引入vant组件AddressList实现我的地址
① 在vant.js中引入AddressList
② 在MyAddress.vue中进行引入配置
③ MyAddress.vue中,对div进行绝对定位,结合Order.vue中的transition,形成动画效果
在MyAddress.vue同级目录下,新建children文件夹,并在children文件夹内新建AddAddress.vue和EditAddress.vue
在index.js中配置路由
借助AddressEdit实现编辑地址和新增地址
① 引入AddressEdit
② 在EditAddress.vue中配置并实现编辑地址(添加地址类似)
③ 在我的地址中增加路由跳转
在vant.js中引入Cell和CellGroup
在Order.vue中进行定制
① 送达时间
② 商品展示
③ 支付方式
④ 备注
⑤ 商品金额、配送费
views新建文件夹login,并在子文件夹login中新建Login.vue和SelectLogin.vue,并将静态界面配置好
首先在state中,在vuex中声明userInfo数据。通过判断本地userInfo中是否存在token数据,来判断是否需要登录。
手机号码验证登录的时候是异步操作了,不能直接通过mutations操作vuex,必须通过actions异步转同步。
定义添加到购物车接口
在添加购物车的时候,将商品存放在本地之前,首先将商品同步到服务器
从服务器获取用户购物车数据,进行本地化并在购物车中显示
// 设置基准 const BASE = 15; (function (doc, win) {
let docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recall = function () {
let clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = BASE * (clientWidth / 320) + 'px'; }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recall, false); doc.addEventListener('DOMContentLoaded', recall, false); })(document, window);
在配置swiper轮播图选中样式的时候,始终不生效。
在样式上,加上/deep/或者>>>即可
在请求数据的时候,可能组件已经加载完成,此时可能就会导致一些BUG(比如轮播图跳转到最后一页后不再继续跳转、轮播图刚开始在最后一页)。这时候可以加上一个正在加载功能,当数据全部请求完成后再加载组件。
在config文件夹下新建文件夹filters,配置全局过滤器
在main.js中引入全局过滤器
在全局中使用| moneyFormat
即可使用过滤器
有些页面不需要每次进入的都是都重新加载,可以keep-alive,当下拉的时候进行刷新重新加载即可。
针对首页和分类进行页面缓存
npm install better-scroll -S
this.$nextTick(()=>{})
)确保在下一个执行周期前初始化。在刷新界面的时候,不应该每次都回到首页
解决方法:进行本地缓存
在config文件夹下的global.js中,写三个方法
vue.config.js
vue中axios通过代理解决跨域问题
加时间戳确保请求不同
一定要及时销毁,不然在调用发布订阅的时候,消息队列中所有的消息都会被执行
结合Popup弹出层和DatetimePicker时间选择集成底部弹出日期组件
引入npm install vue-qriously -S
在main.js中配置
// 6. 配置二维码插件 import VueQriously from "vue-qriously/dist/vue-qriously"; Vue.use(VueQriously)
使用
qrcode:生成二维码的URL地址
借助腾讯地图实现定位
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。