前言

近日公司小程序项目中有个需求,商品列表页及商品详情页配置视频,视频在WiFi环境下自动播放,非WiFi环境下暂停播放。

一、小程序有获取网络类型的API

wx.getNetworkType(Object object)

先获取到当前网络环境是否是WiFi

//app.js  App({onLaunch: function() {wx.getNetworkType({success: function (res) {if (res.networkType == 'wifi') {that.globalData.isWifi = true}}})},globalData: {isWifi: false}
})

在商品列表页,获取到当前isWifi的属性值

// goods_list.jsvar app = getApp()
Page({data: {// 是否是wifi环境isWifi: false},onLoad: function(options) {this.setData({isWifi: app.globalData.isWifi});}
})

然而进行网络切换时,商品列表页获取到的当前网络状态不会发生任何改变。

二、微信小程序提供了监听网络状态变化事件

wx.onNetworkStatusChange(function callback)

我们可以使用该事件监听到网络切换变化

wx.onNetworkStatusChange((res) => {if (res.networkType == 'wifi') {that.globalData.isWifi = true} else {that.globalData.isWifi = false}
});

这时,网络状态切换便可以监听到了,但是app.js中isWifi属性变化改变,商品列表页值并不会随之改变,要怎么办呢。

三、使用Object.defineProperty()监听属性全局更改

回想下vue实现数据双向绑定原理:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。

// 监听网络状态变化
setWatching: function (key,method) {let obj = this.globalData;//加个前缀生成隐藏变量,防止死循环发生let ori = obj[key];   //obj[key]这个不能放在Object.defineProperty里if (ori){    //处理已经声明的变量,绑定处理method(ori);}Object.defineProperty(obj, key, {configurable: true, // 属性是否可以被删除或者可否被重新定义特性enumerable: true, // 是否可以被枚举,简单讲就是在使用Object.keys()时,是否能拿到键值set: function (value) {this['_' + key] = value;method(value);    //数据有变化的时候回调函数,实现同步功能},get: function () {// 在其他界面调用key值的时候,这里就会执行。if (typeof this['_' + key] == 'undefined'){if(ori) {//这里读取数据的时候隐藏变量和 globalData设置不一样,所以要做同步处理this['_' + key] = ori;return ori;} else {return undefined;}} else {return this['_' + key];}}})
}

最后修改下,商品列表页获取isWifi属性的方法

// 监听网络状态变化
app.setWatching('isWifi', (v)=>{this.setData({isWifi: app.globalData.isWifi});
});

现在随意切换网络,在商品列表页便可以监听到了。

完。

微信小程序 - 全局监听globalData的某个属性变化,例如监听网络状态切换相关推荐

  1. 微信小程序----全局状态管理 (便于全局埋点等操作)

    说明 由于我是一个有着一颗玻璃心的博主,导致在2018年后博客很少更新.原因是由于我的分享并没有解决到部分人的问题,而导致被骂了.当时这颗玻璃心就碎了,所以这两年以来很是消极,博客很少更新.这里给那些 ...

  2. 微信小程序-全局数据共享

    微信小程序-全局数据共享MobX 1.开发中常用的数据共享方案 ​ 为了解决组件之间的数据共享,开发中常用的数据共享方案有:Vuex/Redux/MobX等 2.小程序中全局数据共享方案-MobX ​ ...

  3. 微信小程序-------全局通信方案mobx

    微信小程序-------全局通信方案mobx 微信小程序本身并没有提供类似于vue中的vuex或者React里的Redux这样的全局通信方案,只在组件中有behaviors这样的属性共享机制,用起来也 ...

  4. 逆战之微信小程序全局配置

    微信小程序之全局配置-1 小程序的配置分为全局配置.页面配置及sitemap 配置 全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置.文件内容为一个 JSON 对象,有以 ...

  5. php小程序开发实例,微信小程序全局配置开发实例

    本文主要和大家分享微信小程序全局配置开发实例,主要以代码的形式和大家分享,希望能帮助到大家. 一.app.json 使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设 ...

  6. 微信小程序全局路由拦截

    前言 略 微信小程序全局路由拦截方法1 目前微信小程序没有全局路由拦截.要想实现全局路由拦截,需要自己进行扩充.具体参考这里:微信小程序–路由拦截器. 实现思路: 替换Page的参数对象的onShow ...

  7. 微信小程序 全局路由拦截

    1. 微信小程序 全局路由拦截 // utils/filter.js function loginCheck(pageObj) {if (pageObj.onLoad) {let _onLoad = ...

  8. 微信小程序全局配置文件app.json中window:backgroundColor“不生效”

    那些年我们一起踩过的坑~ 今天说一下微信小程序全局配置文件app.json中window的backgroundColor属性,设置之后发现没效果. 查了资料发现原来这个backgroundColor属 ...

  9. uniapp实现微信小程序全局【发送给朋友】、【分享到朋友圈】、【复制链接】

    在开发微信小程序的时候,发现[发送给朋友].[分享到朋友圈].[复制链接]功能,灰色不可用. 很常见的功能,但是这几个功能,并不是你项目建起来了就有的. 1.[发送给朋友]使用 onShareAppM ...

  10. 微信小程序全局监听globalData的某个属性变化

    前言 近日在开发微信小程序的时候,要将globalData中某个属性的变化要同步到某个页面中. 使用Object.defineProperty()监听属性全局更改 经过上网查询相关资料,参考vue实现 ...

最新文章

  1. HDU 4035 Maze(树形概率DP)
  2. 进阶学习(4.2) JVM 常用配置参数, GC 参数
  3. Prometheus部署监控容器
  4. 字节跳动被爆商业化部门大量裁员
  5. OpenShift 4 - 关闭更新MachineConfig后集群节点自动重启功能
  6. 外虚内实是什么意思_取名|为什么00后那么多梓涵?
  7. python还是java好找工作_你觉得学 Python 还是 Java 更好找工作?
  8. as3.0横向渐变发光字
  9. 单例模式中的饿汉和懒汉模式
  10. matlabrobert锐化_常用图像锐化MATLAB实现
  11. php命名空间的设计思想和缺点
  12. [poj 1741]Tree 点分治
  13. 计算机桌面黑屏有鼠标,win7系统启动黑屏只有显示鼠标指针怎么办(图文)
  14. 路由器WIFI密码怎么设置?快速设置,只需1分钟
  15. python库源码分析_python第三方库Faker源码解读
  16. 如何ping网站的IP地址
  17. mktime()函数使用
  18. java 环境变量 locale_locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
  19. AD2020库安装及查找库
  20. 【探花交友】day05—圈子互动

热门文章

  1. BUU-Crypto-萌萌哒的八戒
  2. JS(JavaScript)入门设置密码框中点击小眼睛显示隐藏所输入的密码!
  3. JAVA 小程序支付+服务商分账
  4. r语言rank降序_R语言速成之第一章 向量(编辑,排序,10个基本函数)
  5. Arduino单片机控制三相电机正反转
  6. 台积电3nm晶圆报价超14万/ 罗永浩AR创业公司获3.6亿融资/ 陶哲轩入驻Mastodon…今日更多新鲜事在此...
  7. 求助-影像组学 for循环连续提取影像受阻
  8. 苹果和虫子(YZOJ-1058)
  9. Qt 连接并使用 SQL Sever数据库
  10. 北理工计算机学院沈建斌,礼欣_北京理工大学计算机学院