1.什么是全局数据共享

全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题。

开发中常用的全局数据共享方案有: Vuex、Redux、 MobX等。

2.小程序中的全局数据共享方案

在小程序中,可使用mobx-miniprogram

配合mobx-miniprogram-bindings实现全局数据共享。

其中:

● mobx- miniprogram

  用来创建Store实例对象

● mobx-miniprogram-bindings

  用来把Store中的共享数据或方法,绑定到组件或页面中使用

3、MOBX安装

需要先有NPM支持

https://www.cnblogs.com/mindzone/p/16223460.html

安装MOBX依赖

npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

安装完成后,每次都要删除之前构建Miniprogram_npm包

然后重新构建生成

4、编写Store文件

/**
* /store/index.js
* 导入Mobx包资源
*/
import { action, observable } from 'mobx-miniprogram' const config = {
// 配置对象中,存放需要共享的数据字段
numA:1,
numB:2, // 设置只读的计算属性 get 标记该数据只能只读
get sum() { return this.numA + this.numB }, // actions方法, 用来修改store中的数据
updateNum1: action(function (step) {
this.numA += step
}),
updateNum2: action(function (step) {
this.numB += step
}),
}
// 导出资源
export const store = observable(config)

  

5、绑定页面

在页面的JS文件中导入资源:

import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/index'

加载时绑定Store资源

  /**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
// 页面加载时设置绑定
this.storeBindings = createStoreBindings(
this, {
store,
fields: ['numA', 'numB', 'sum'],
actions: ['updateNum1', 'updateNum2']
}
)
},

结束时解除Store资源

/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
// 解除绑定
this.storeBindings.destoryStoreBindings()
},

6、使用Store配置:

store变量页面展示

<view>
{{numA}} + {{numB}} = {{sum}}
</view>
<van-button
data-step="{{1}}"
type="primary"
bindtap="btnHandler1">
numA + 1
</van-button> <van-button
data-step="{{-1}}"
type="danger"
bindtap="btnHandler2">
numA - 1
</van-button>

绑定的方法,这里演示了如何获取dataset变量

  btnHandler1(e) {
this.updateNum1( e.target.dataset.step)
},
btnHandler2(e) {
this.updateNum1( e.target.dataset.step)
}

  

7、配置Store到组件中使用

组件引入Mobx资源:

import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/index'

绑定Store和对应的属性:

// components/test6/test6.js
Component({
behaviors: [storeBindingsBehavior], storeBindings: {
store, // 声明绑定的字段
fields: {
// 写法一
numA: () => store.numA,
// 写法二
numB: (store) => store.numB,
// 写法三
sum: 'sum'
},
// 绑定的方法
actions: {
updateNum2: 'updateNum2'
}
}
})

方法编写:

  /**
* 组件的方法列表
*/
methods: {
btnHandler1(e) {
this.updateNum2( e.target.dataset.step)
},
btnHandler2(e) {
this.updateNum2( e.target.dataset.step)
}
}

组件HTML代码

<!--components/test6/test6.wxml-->
<text>components/test6/test6.wxml</text>
<view>
{{numA}} + {{numB}} = {{sum}}
</view>
<van-button
data-step="{{1}}"
type="primary"
bindtap="btnHandler1">
numB + 1
</van-button> <van-button
data-step="{{-1}}"
type="danger"
bindtap="btnHandler2">
numB - 1
</van-button>

  

在页面和组件能够共同操作Store存储的变量:

【微信小程序】 全局数据共享的更多相关文章

  1. 微信小程序全局状态管理 wxscv

    微信小程序中,数据状态不同页面中不能跨页面同步更新,也就是缺失类似vuex,mobx,redux全局的数据状态管理功能. 有些人移植了这些库,但是毕竟不是微信小程序生态的东西. Tencent也发布了 ...

  2. 微信小程序全局属性

    通用全局属性:(前端也有) Infinity 代表正的无穷大的数值. NaN 指示某个值是不是数字值. undefined 指示未定义的值. 通用全局函数:(前端也有) decodeURI() 解码某 ...

  3. 微信小程序-全局配置、组件、页面跳转、用户信息等

    全局配置 三个页面 app.json pages字段 "pages":[ "pages/index/index", # 首页 "pages/home/ ...

  4. uni-app 微信小程序全局分享

    实际使用中,经常需要小程序分享到好友或者朋友圈,一般而言是一个个页面去设置. 官网分享介绍:https://uniapp.dcloud.io/api/plugins/share?id=onsharea ...

  5. 微信小程序全局/页面配置

    flex布局 父元素 display:flex; flex-direction: row; justify-content:space-between 补充 flex-direction属性决定主轴的 ...

  6. 微信小程序全局数据globalData的使用问题

    如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...

  7. 微信小程序开发优化

    一.开发优化一 1.使用Vant Weapp 1.1 什么是Vant Weapp Vant Weapp官网链接 Vant Weapp是有赞前端团队开源的一套小程序UI组件库,助力开发者快速搭建小程序应 ...

  8. 微信小程序资源整理

    微信小程序相关的文档.教程.开源项目等资源的整理,以便于开发学习使用. —— —— 收录仅作个人学习使用,涉及侵权行为及时联系: maple_6392@163.com 项目地址:GitHub | 码云 ...

  9. 如何在微信小程序定义全局变量、全局函数、如何实现 函数复用 模块化开发等问题详解

    1.如何定义全局数据 在app.js的App({})中定义的数据或函数都是全局的,在页面中可以通过var app = getApp();  app.function/key的方式调用,不过我们没有必要 ...

  10. 【微信小程序开发】全局配置

    今天看看小程序全局配置. 上一篇[微信小程序开发]秒懂,架构及框架 配置,无非就是为了增加框架的灵活性,而定下的规则. 微信小程序的配置文件是一个树状结构,各个节点代表不同的配置项,小程序框架会解析这 ...

随机推荐

  1. vue3项目安装依赖报错 npm ERR! code ERESOLVE

    vue3项目安装依赖报错 npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While reso ...

  2. 国产搜索引擎崛起:Elasticsearch 国产化加速

    背景 多年来,Elasticsearch(简称:ES) 在搜索领域一直独占鳌头,其卓越的性能和广泛的应用深受国内众多企业的青睐.从查询搜索到数据分析,再到安全分析,Elasticsearch 均展现出 ...

  3. AnkhSVN For Visual Studio 2022

    AnkhSVN For VS2022 AnkhSVN 2.9.87 - Visual Studio 2022 support https://github.com/AmpScm/AnkhSVN/rel ...

  4. ES进阶

    https://www.elastic.co/guide/en/elasticsearch/reference/current/cat.html 1.监控接口 访问es的_cat接口,获取不同的属性 ...

  5. 利用Vue做一个小购物车

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. TrustZone与高通

    改编自:https://blog.csdn.net/guyongqiangx/article/details/78020257 介绍 导读 Q:什么是Trust Zone A:Trust Zone:是 ...

  7. NAT类型发现

    一.前言 之前一篇文章中,提出了一个判断NAT类型的方案.该方案是自己研究设计的,比较粗糙.近期研读了关于STUN的一些协议标准,其中RFC3489中就包含了判断NAT类型的标准方案. 与自己设计的方 ...

  8. 核对不同文件夹所含内容的差异并提取缺失内容:Python代码

      本文介绍基于Python语言,以一个大文件夹作为标准,对另一个大文件夹所包含的子文件夹或文件加以查漏补缺,并将查漏补缺的结果输出的方法.   首先,来明确一下本文所需实现的具体需求.现有一个大文件 ...

  9. java --面试题大全

            J2EE面试题   文档版本号:V2.0                   2016年11月 目 录 1. Java基础部分 8 1.1. 一个".java"源文 ...

  10. Oracle 字符串分割,并将内码转中文(简单实现),项目实战

    导读 实际项目开发过程中,可能会遇到这种情况,A表中A1字段存储B表中的内码如(1,2,3),此时需要将A表中的A1字段转中文,为了方便理解,我们这里创建学生表和老师表,一个学生对应N个老师. 创建表 ...