基于vue开发的在线付费课程应用过程


Posted in Javascript onJanuary 25, 2018
  • 使用 vux UI组件库
  • 使用 vue-navigation 缓存页面,此库实现了前进刷新后退读缓存的功能,像原生APP导航一样。用子路由的方式实现tabbar有bug,用vuex解决了。
  • 使用 lib-flexible 解决移动页面适配

来一个清单

"dependencies": {
  "fastclick": "^1.0.6",
  "lib-flexible": "^0.3.2",
  "lodash": "^4.17.4",
  "vue": "^2.5.2",
  "vue-navigation": "^1.1.3",
  "vue-router": "^3.0.1",
  "vuex": "^2.1.1",
  "vuex-i18n": "^1.3.1",
  "vux": "^2.7.8"
 }

微信登录

应用需要登录后可以访问,微信登录要实现的功能是从任意一个链接进入,判断是否登录,未登录跳到微信授权,成功后返回登录前链接,由于对php的微信授权做得比较多,所以微信授权放在的php实现,这里说一下实现过程。路由方式使用了 history 模式,打包好的 index.html 文件用php渲染出来。路由path定义统一的格式 r/xxxx ,这样对于php端的路由可以实现匹配,只要是这个格式的路由都匹配到渲染 index.html 的方法,要不然访问的时候服务端出现404错误。

php端路由配置,这里是laravel,其他框架应该也差不多

Route::get('/', 'HomeController@index')->middleware('auth')->name("home");
Route::get('/r/{query}', 'HomeController@index')->middleware('auth')->name("home");

为什么不用 hash 模式呢,因为用hash模式的下php获取来源地址的时候获取不到#后面参数,虽然可以用参数传给后端,但是好麻烦,所以就用 history 模式了,后面的支付和分享也是这样

微信登录流程

  • 打开任意链接 xxx.com/r/xxx
  • 先经过php端,匹配路由,匹配失败的话就会找不到页面啦~
  • 匹配成功判断登录,未登录就跳到微信登录,跳转之前先记录当前链接,登录成功就返回记录的链接

用户登录状态使用token,token定义在index.html这个页面里面

<script>
  var TOKEN = '{{$token}}';//php模板变量
  var HOST = 'http://read.xxx.com';//程序api接口域名
  var INURL = location.href //页面域名(在ios自定义分享时候会用到)
</script>

微信支付

微信支付要解决的就是路径配置问题,由于我们的路由都是以 r/xxxxx 的格式来的,所以在微信那边就直接填写 http://xxx.xxxx.com/r/ ,注意需要支付的页面传参请使用 query 的方式。要不然r后面就会出现目录了,比如 r/goods/id/1 要换成 r/goods?id=1 ,这样只要定义一个路径全站都可以拉起支付

自定义分享

由于使用了 history 的路由模式,所以ios的问题需要解决,在路由跳转后,安卓能正常难道当前的路径,ios获取的是你第一打开应用的路径,所以在签名的时候就得注意了,安卓拿当前路径去签名,ios要拿第一次打开页面的路径去签名。这就是为什么要在路由初始化之前要定义一个第一次打开应用的路径。就是 index.html 里面那个具体怎么去签名,我这里使用的是 axios

关键代码

let http = axios.create({
 baseURL: HOST + '/api/',
 timeout: 10000,
 headers: {
  'Accept': 'application/json',
  'Authorization': 'Bearer ' + TOKEN,
  'InUrl': INURL,//传第一次打开页面的链接
  'IsIos': isiOS//传是否ios
 }
})

后台要拿三个

$is_ios = request()->header('IsIos');//获取是否ios
$in_url = request()->header('InUrl');//获取第一次打开页面路径
$in_url = explode("#", $in_url)[0];//处理一下
if ($is_ios == 'true') {
  $url = $in_url;//ios用第一次打开页面路径签名
} else {
  $url = url()->previous();//安卓就用请求这个接口的路径去签名
}
//用url去签名吧

拿到签名后怎么初始化呢

this.$wechat.config(res.data.wx_config)

这是vux提供的

由于应用使用了页面缓存,所以在定义自定义分享数据的代码就要放在 activated 里面执行,具体实现

首先定义一个 init=false

mounted 开始请求数据拿到签名

this.$wechat.config(res.data.wx_config)
 this.$wechat.ready(() => {
  this.set_share()
 })

在 methods 定义一个方法

set_share () {
 // 自定义分享到朋友圈
 this.$wechat.onMenuShareTimeline({
  title: this.share.title,
  link: this.share.url,
  imgUrl: this.share.icon,
  success: () => {}
 })
 this.$wechat.onMenuShareAppMessage({
  title: this.share.title,
  desc: this.share.desc,
  link: this.share.url,
  imgUrl: this.share.icon
 })
}

activated 定义

activated () {
 this.set_share()
}

keep-alive 组件激活时重新设置一下自定义分享的数据,要不然如果在返回前的页面也定于的自定义分享,返回后页面没有刷新,分享的数据就会是之前的,这里重新定义一下就可以了。

总结

以上所述是小编给大家介绍的基于vue开发的在线付费课程应用过程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS中style属性
Oct 11 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
Jan 11 Javascript
jQuery手动点击实现图片轮播特效
Apr 20 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
May 27 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 Javascript
vue+axios 前端实现的常用拦截的代码示例
Aug 23 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
基于vue 开发中出现警告问题去除方法
Jan 25 #Javascript
关于express与koa的使用对比详解
Jan 25 #Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 #Javascript
Vue框架之goods组件开发详解
Jan 25 #Javascript
前端MVVM框架解析之双向绑定
Jan 24 #Javascript
JS运动特效之完美运动框架实例分析
Jan 24 #Javascript
JS运动特效之同时运动实现方法分析
Jan 24 #Javascript
You might like
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP常用的小程序代码段
2015/11/14 PHP
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Python 串口读写的实现方法
2019/06/12 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
软件测试面试题
2014/01/05 面试题
企业内控岗位的职责
2014/02/07 职场文书
高一学生期末评语
2014/04/25 职场文书
淘宝好评语大全
2014/05/05 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
社会实践的活动方案
2014/08/22 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
展览会邀请函
2015/02/02 职场文书
新学期感想
2015/08/10 职场文书
护士医德医风心得体会
2016/01/25 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android