在vue中在线付费课程(详细教程)
这篇文章主要介绍了基于vue开发的在线付费课程应用过程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
使用 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中在线付费课程(详细教程)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在 Vue.js 中引用 JS 文件的方法有三种:直接使用 <script> 标签指定路径;利用 mounted() 生命周期钩子动态导入;通过 Vuex 状态管理库进行导入。

在 Vue.js 中,懒加载允许根据需要动态加载组件或资源,从而减少初始页面加载时间并提高性能。具体实现方法包括使用 <keep-alive> 和 <component is> 组件。需要注意的是,懒加载可能会导致 FOUC(闪屏)问题,并且应该仅对需要懒加载的组件使用,以避免不必要的性能开销。

Vue.js 中的 watch 选项允许开发者监听特定数据的变化。当数据发生变化时,watch 会触发一个回调函数,用于执行更新视图或其他任务。其配置选项包括 immediate,用于指定是否立即执行回调,以及 deep,用于指定是否递归监听对象或数组的更改。

在 Vue.js 中使用 Bootstrap 分为五个步骤:安装 Bootstrap。在 main.js 中导入 Bootstrap。直接在模板中使用 Bootstrap 组件。可选:自定义样式。可选:使用插件。

可以通过以下方法查询 Vue 版本:使用 Vue Devtools 在浏览器的控制台中查看“Vue”选项卡。使用 npm 运行“npm list -g vue”命令。在 package.json 文件的“dependencies”对象中查找 Vue 项。对于 Vue CLI 项目,运行“vue --version”命令。检查 HTML 文件中引用 Vue 文件的 <script> 标签中的版本信息。

Vue.js 返回上一页有四种方法:$router.go(-1)$router.back()使用 <router-link to="/"> 组件window.history.back(),方法选择取决于场景。

在 Vue 中实现跑马灯/文字滚动效果,可以使用 CSS 动画或第三方库。本文介绍了使用 CSS 动画的方法:创建滚动文本,用 <div> 包裹文本。定义 CSS 动画,设置 overflow: hidden、width 和 animation。定义关键帧,设置动画开始和结束时的 transform: translateX()。调整动画属性,如持续时间、滚动速度和方向。

可以通过以下步骤为 Vue 按钮添加函数:将 HTML 模板中的按钮绑定到一个方法。在 Vue 实例中定义该方法并编写函数逻辑。
