分类 技术宅的演示性文稿 下的文章

项目类型:vue+vux+axios

刚开始,把Axios封装在了http.js文件里面,然后为了使用VUX的提示框消息,把拦截器直接写在了main.js里面。直接调用接口,一切正常。
然而因为返回值有统一的code错误代码提示,所以在拦截器里面加入了code的判断以便统一返回值。刚开始一切都是按照预期的结果来走的。就在一个夜黑风高的晚上,我头晕眼花的按F5手动刷新了一下页面,惊奇的发现拦截器失效了,并没有拦截外面的Coode Json代码层,而是直接把服务器的全部json数据劈头盖脸的砸在了我的脸上。一脸懵逼的我以为是接口的问题,可是在组件里面直接用console.log打印出来的数据又是对的。
lj1.png
然后我突然想到了一个问题,直接点击页面返回的话,确实是OK的,但是如果按F5手动刷新的话,Axios并不会直接走main.js里面的拦截器代码。

后来我把拦截器放在了封装的http.js里面,结果就一切正常了,不过郁闷的是放在了外面以后,vux的提示插件没有办法用了。
打印了this指针,果不其然的undefind了,后来想到了一个比较变通的方法,我在index.html里面增加了一个var app用来存储main里面初始化的vue对象,并且在main.js里面把初始化的vue对象给赋值到windows.app上面,这样全局都可以使用了。
lj2.png
把vux的提示代码加上window.app.$vux.toast.show 完美解决问题!

官方文档并没有说明通过npm安装以后,如果在vue里面使用,我今天研究了一下,可以用插件的方法引入进去。
首先,通过npm安装mathjs

npm install mathjs --save

然后在main.js里面通过import引入

// import math from 'mathjs'          // 废弃用法

import * as math from 'mathjs'     // 新版本需要这样引入 感谢评论区的指出

然后重点来了。
在后面加入

Vue.prototype.$math = math

加入以后,在项目里就可以使用了
使用方法比如

this.$math.add(5,3) // 返回的结果等于8

微信的开发者工具是坑,说明文档也坑。
最近在调试微信的分享页面时候发现IOS客户端是正常分享的,而安卓客户端就无法出现自定义分享的图片跟标题描述这些东西。
很奇怪的调试过程,因为IOS客户端是正常的,那就不应该是参数的问题。那把目光放在开发者工具上面,因为开发者工具很多东西是根据安卓环境模拟的,所以看看总没有错。
在看了一下开发者工具给的信息以后,发现开发者工具提示updateAppMessageShareData、updateTimelineShareData这两个接口无效。
因为是同事写的分享接口,去微信官网的SDK查看了一下这两个接口操作。在官网发现了这句话

请注意,原有的
wx.onMenuShareTimeline、wx.onMenuShareAppMessage、wx.onMenuShareQQ、wx.onMenuShareQZone
接口,即将废弃。请尽快迁移使用客户端6.7.2及JSSDK 1.4.0以上版本支持的
wx.updateAppMessageShareData、updateTimelineShareData 接口。
那问题来了,既然是即将废弃,那是不是还没有废弃呢?把同事的updateAppMessageShareData接口操作改成了所谓即将废弃的onMenuShareAppMessage接口。然后用安卓客户端分享,一切正常。IOS端分享也是一切正常。

本来还猜想测试环境有问题,特意打开手机查看了一下,我的微信客户端是6.7.3的,比官方推荐版本还高了一个版本。
是什么原因导致的新接口不能用我也不太清楚,在官方还没有更新或者废弃之前,还是用以前的接口吧。

then()方法的作用是Promise实例添加解决(fulfillment)和拒绝(rejection)状态的回调函数。then()方法会返回一个新的Promise实例,所以then()方法后面可以继续跟另一个then()方法进行链式调用。

let p = new Promise((resolve, reject) => {

setTimeout(resolve, 1000, 'success');
});
p.then(

res => {
    console.log(res);
    return `${res} again`;
}
)

.then(
    res => console.log(res)
);

// 连续
// success
// success again
但是前一个then()方法中的回调函数中又可能返回一个Promise实例,这时候后面一个then()方法中的回调函数会等前一个Promise实例的状态发生变化才会调用。

let p = new Promise((resolve, reject) => {

setTimeout(resolve, 1000, 'success');
});
p.then(

res => {
    console.log(res);
    return new Promise((resolve, reject) => {
        setTimeout(resolve, 1000, 'success');
    });
}
)

.then(
    res => console.log(res)
);
// 相隔1000ms
// success
// success

准备工作

一、PC 端安装 谷歌浏览器
二、手机需要开启【开发者模式】->【USB调试】
三、手机数据线
四、项目需在PC端本地起一个服务运行

开始操作
F12 打开开发者工具,依次找到 More tools -> Remote devices(远程设备) -> setting -> port forwarding(端口转发),之后点击 【Add Rule】,输入 【8081】端口号 + 手机端需要请求的地址 localhost:8081,最后点击【Add】按钮保存,下面为 GIF 图演示
398584576.gif
上面的是电脑端操作,下面是手机端操作
用数据线将手机和电脑连接,开启手机的【开发者模式】->【USB调试】,多个型号开启方法不尽相同,可自行百度
手机端打开浏览器测试
小米手机自带浏览器测试成功 http://localhost:8081
UC 浏览器测试成功 http://localhost:8081
Chrome 浏览器测试成功 localhost:8081 唯一的方便之处是不需要输入协议前缀了

作者:sunxiaochuan
链接:https://www.jianshu.com/p/687b41deba48
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。