uniapp监听网络状态_是否断网判断
source link: https://www.fly63.com/article/detial/12115
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
扫一扫分享
uniapp 本身是跟网络状态相关的api有两个:
getNetworkType
uni.getNetworkType({
success: function (res) {
console.log(res.networkType);
}
});
onNetworkStatusChange
uni.onNetworkStatusChange(function (res) {
console.log(res.isConnected);
console.log(res.networkType);
});
进行网络监听的话 自然是使用到onNetworkStatusChange 这个api的,但是这个网络监听它是全局的监听的,比较珍贵,因此需要进行事件的分发。
这里使用分发事件的:
eventEmitter.js
function EventEmitter() {
this.listeners = {};
this.maxListener = 10;
}
EventEmitter.prototype.on = function (event, cb) {
let listeners = this.listeners;
if (listeners[event] && listeners[event].length >= this.maxListener) {
console.error('监听器的最大数量是%d,您已超出限制', this.maxListener)
}
if (listeners[event] instanceof Array) {
if (listeners[event].indexOf(cb) === -1) {
listeners[event].push(cb);
}
} else {
listeners[event] = [].concat(cb);
}
}
EventEmitter.prototype.addListener = EventEmitter.prototype.on;
EventEmitter.prototype.emit = function (event) {
let args = Array.prototype.slice.call(arguments);
args.shift();
this.listeners[event].forEach(cb => {
cb.apply(null, args);
});
}
EventEmitter.prototype.removeListener = function (event, listener) {
let listeners = this.listeners;
let arr = listeners[event] || [];
let i = arr.indexOf(listener);
if (i >= 0) {
listeners[event].splice(i, 1);
}
}
EventEmitter.prototype.once = function (event, listener) {
var self = this;
function fn() {
var args = Array.prototype.slice.call(arguments);
listener.apply(null, args);
self.removeListener(event, fn);
}
this.on(event, fn)
}
EventEmitter.prototype.removeAllListener = function (event) {
this.listeners[event] = [];
}
EventEmitter.prototype.listeners = function (event) {
return this.listeners[event];
}
EventEmitter.prototype.setMaxListeners = function (num) {
this.maxListener = num;
}
export default EventEmitter
我希望的是在指定的组件中:可以监测网络状态,当发现断网,做一些事情,当发现网络恢复做另一些事情。
在main.js中引入 并绑定在原型上
import { networkStatusChangeEmitter } from '@/utils/onNetworkStatusChange.js'
vue.prototype.$networkStatusChangeEmitter = networkStatusChangeEmitter // 进行网络状态的监听
在组件里 在组件销毁时需要将事件注销 为了更方便的使用 这里进行了一层封装:
import EventEmitter from './eventEmitter.js'
const networkStatusChangeEmitter = new EventEmitter()
uni.onNetworkStatusChange(function (res) {
networkStatusChangeEmitter.emit('networkStatusChange',res)
});
// 组件生命周期内的网络状态监听
function onLiveNetWorkStatusChange(context,cb){
const listener = (res)=>{
cb(res)
}
context.$on('hook:mounted',()=>{
context.$networkStatusChangeEmitter.addListener('networkStatusChange',listener)
})
context.$on('hook:beforeDestroy',()=>{
context.$networkStatusChangeEmitter.removeListener('networkStatusChange',listener)
})
}
export { onLiveNetWorkStatusChange, networkStatusChangeEmitter }
使用姿势:
mounted(){
onLiveNetWorkStatusChange(this,(res)=>{
console.log(res)
})
}
Recommend
-
60
“我妈给我买了点心,我就看着上面的字念:蔓越莓松饼。手机上从来没有搜过,然后松饼就出现在了我的淘宝首页上,真的把我吓到了!” 网友“王辛藏的小口袋”日前发微博如...
-
8
Android 监听键盘状态 获取键盘高度 – Android开发中文站你的位置:Android开发中文站 > 热点资讯 > Android 监听键盘状态 获取键盘高度...
-
5
在《使用uView UI+UniApp开发微信小程序》的随笔中,介绍了基于uView UI+UniApp开发微信小程序的一些基础知识和准备工作,其中也大概介绍了一下基本的登录过程,本篇随笔详细介绍一下微信小程...
-
7
设计彩蛋Google Play的断网状态也有互动小游戏可以玩? 产品: Google猎人: ...
-
74
web3 如何监听链上的交易数据 (pending状态) web3 如何监听链上的交易数据 (pending状态) ...
-
8
Android Network ——判断网络状态(网络的连接,改变,和判断2G/3G/4G) – Android开发中文站 你的位置:Android开发中文站 > Android开发 &g...
-
7
使用rpc-json来进行实现,但是eth_getFilterChanges获取到的hash该怎么过滤到我想要的合约地址呢 eth_newPendingTransactionFilter eth_getFilterChanges
-
5
【uniapp实战笔记】使用uni-nav-bar自定义顶部状态栏和导航栏 原创 博读代码 2022-03-02 16...
-
6
uniapp开发app,手机状态栏问题挡住问题,uni app 刘海屏适配 问题:在使...
-
3
由于新机首次安装app的时候会出现:请求网络权限“是否允许使用数据”,如果用户很长时间没点击允许,就会出现app内接口请求永远返回失败的情况,需要用户清掉APP重新打开才能正常请求使用...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK