【小程序开发】全局数据共享

1.全局数据共享

安装MobX相关的包

管理员cmd当前目录:

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

构建npm: 

2. 创建store实例、定义计算属性与action方法

新建文件夹store,新建文件store.js

 store.js

// 通过observable方法创建store的实例对象
//从mobx-miniprogram导出一个方法:action
import{action, observable}from'mobx-miniprogram'
// 通过es6导出语法 导出store实例对象
export const store=observable({
num1:12,
num2:23,
// 计算属性,get表示当前属性是只读的
get sum(){
  return this.num1+this.num2
},
// action函数专门用来修改数据值
updataNum1=action(function(step){
  this.num1+=step
}),
updataNum2=action(function(step){
  this.num2+=step
})
})

3.在页面使用store成员

页面.js

// 从mobx-miniprogram-bindings包里导入createStoreBindings方法
// createStoreBindings方法将store里面的数据或方法绑定到当前页面使用
import{createStoreBindings}from 'mobx-miniprogram-bindings'
// 导入store实例对象
import{store}from '../../store/store'
Page({
  onLoad:function(){
    // this表示当前页面的实例,{}表示配置对象
    // 将createStoreBindings返回值挂载到当前页面作为自定义属性存在
    this.storeBindings=createStoreBindings(this,{
      // store是数据源,将store对应的属性或方法绑定到实例上
      store,
      // fields表示绑定哪些字段到当前页面
      fields:['num1','num2','sum'],
      actions:['updataNum1']
      })
  },
  onUnload:function(){
    // destoryStoreBindings()可实现清理工作
    this.storeBindings.destoryStoreBindings()
  },
  btnhander1(e){
    console.log(e);
    this.updataNum1(e.target.dataset.step)
  }

  })

页面.wxml

<!--index.wxml-->
<!-- bind:自定义事件名称="方法名字" -->
<view>{{num1}}+{{num2}}={{sum}}</view>
<!-- data-step="1"绑定步长值 -->
<van-button type="primary" bind:tap="btnhander1" data-step="{{1}}">num1+1</van-button>
<van-button type="danger" bind:tap="btnhander1" data-step="{{-1}}">num2-1</van-button>

效果:

问题:运行出错

原因:

1.输入符号错误或''中有多余空格

2.清除缓存

3.

调低版本 

4.重新编译或重启程序

总结:编译遇到多个错误先检查2遍代码

4.在组件中使用store成员

在components文件中新建numbers文件夹,新建Component

app.json

 "usingComponents": {  
    xxx
    "my-numbers":"./components/numbers/numbers"
  },

numbers.js

// components/numbers/numbers.js
// 导入成员storeBindingsBehavior
import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
// 导入实例store
import{store}from '../../store/store'
Component({
  // behaviors指向一个数组
behaviors:[storeBindingsBehavior],
storeBindings:{
  // 数据源
  store,
  // fields绑定计算属性或数据字段
  fields:{
    // Conum1是组件的名字,num1是store的名字
    Conum1:'num1',
    Conum2:'num2',
    Cosum:'sum',
  },
  // actions绑定方法
  actions:{
    CoupdataNum2:'updataNum2'
  }
},
  methods: {
    btnhander2(e){
      this.CoupdataNum2(e.target.dataset.step)
    }
  }
})

number.wxml

<view>{{Conum1}}+{{Conum2}}={{Cosum}}</view>
<van-button type="primary" bind:tap="btnhander2" data-step="{{1}}">Conum1+1</van-button>
<van-button type="danger" bind:tap="btnhander2" data-step="{{-1}}">Conum2-1</van-button>

 效果:

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还有高手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值