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. mobile select 移动端下拉框

    官方链接 原生 js 移动端选择控件,不依赖任何库 可传入普通数组或者 json 数组 可根据传入的参数长度,自动渲染出对应的列数,支持单项到多项选择 自动识别是否级联 选择成功后,提供自定义回调函数 ...

  2. jq 下载带上token设置form表单并且兼容ie8

    先在publice公共资源里面或者自己随便写一个函数自己记得调用就行 先加载form表单组件 /** * 添加form下载组件 * @param {*} wrp */ appendFormDownlo ...

  3. C# .NET Framework EXCEL NPOI EOF in header

    实例化时异常: EOF in header 错误代码: try { workBook = new HSSFWorkbook(file); } catch { try { workBook = new ...

  4. CompatTelRunner CPU 占用 22% win10 笔记本常常无故风扇狂转

    CompatTelRunner CPU 占用 22% win10 笔记本常常无故风扇狂转 CompatTelRunner.exe is also known as Windows Compatibil ...

  5. .net执行oracle查询语句报错“指定的转换无效”解决方案

    问题: .net执行oracle查询语句报错"指定的转换无效",在PL/SQL中正常: SELECT A.ID,SUM(TO_NUMBER(A.MODIFYTIME-A.UPLOA ...

  6. leetcode_2-两数相加_javascript

    题目 2.两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新 ...

  7. Go 语言中的异常处理简单实践 panic、recover【GO 基础】

    〇.Go 中的异常处理简介 Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误. panic.recover 参数类型为 interface{},因此可抛出任何类型对象 ...

  8. Python 导入包失败,提示“most likely due to a circular import”

    详细报错信息如下: ImportError: cannot import name 'DoReplace' from partially initialized module 'common.do_r ...

  9. HDU1010第一道DFS

    DFS就是深度搜索算法....感觉就像破案一样.... #include<iostream> #include<cstdio> #include<cstring> ...

  10. Linux 下使用Java连接MySQL数据库,并且实现插入、删除、选择操作

    实验环境: OS : CentOS5.5 (Linux) IDE : Eclipse DBMS : MySQL 准备工作: 1.安装 MySql . 详见http://www.cnblogs.com/ ...