基于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 相关文章推荐
兼容多浏览器的字幕特效Marquee的通用js类
Jul 20 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
jquery实现通用版鼠标经过淡入淡出效果
Jun 15 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
jQuery处理json数据返回数组和输出的方法
Mar 11 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
react-native-fs实现文件下载、文本存储的示例代码
Sep 22 Javascript
使用Vuex实现一个笔记应用的方法
Mar 13 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 Javascript
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
JavaScript实现简单图片切换
Apr 29 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
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
javascript实现下雨效果
2017/03/27 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
python映射列表实例分析
2015/01/26 Python
MySQL最常见的操作语句小结
2015/05/07 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
2014年会演讲稿范文
2014/01/06 职场文书
大学校园活动策划书
2014/02/04 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
食品安全责任书范本
2015/05/09 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
python字符串的多行输出的实例详解
2021/06/08 Python
Python中可变和不可变对象的深入讲解
2021/08/02 Python
HTML基础详解(上)
2021/10/16 HTML / CSS