博客:小程序的《全局数据共享》

简介

解决组件间通信: MobX

在这里插入图片描述

安装MobX相关的包

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

构建npm

构建之前先把目录中的miniprogram_npm删除再来重新构建npm

  1. 删除

在这里插入图片描述

  1. npm

在这里插入图片描述

  1. 检查成功

在这里插入图片描述

创建store实例并定义计算属性和actions方法

  1. 创建store文件并导出

在这里插入图片描述

import { observable }  from 'mobx-miniprogram'
export const store = observable({})
  1. 挂载共享数据
num1:1,
num2:2

在这里插入图片描述
3. 定义计算属性

 get sum(){
    return this.num1 + this.num2
  }//只读 不能赋值给让

在这里插入图片描述

  1. actions方法 修改store,跟vuex类似
 updateNum1:action(function (step){
    this.sum1 += step
  }),
  updateNum2:action(function (step){
    this.sum2 += step
  })

在这里插入图片描述

使用store成员

接下来我们进入页面.js文件中

  1. 导入
import {creaestoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
  1. onLoad 函数里写页面监听加载、onReady里调用detoryStoreBindings这个方法
 onLoad: function (options) {
    this.storeBindings = createStoreBindings(this,{
      store,
      fields:[],
      actions:[]
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    this.storeBindings.detoryStoreBindings()
  },
  1. 把store的成员绑定过来,通过fields和actions
onLoad: function (options) {
    this.storeBindings = createStoreBindings(this,{
      store,
      fields:['num1','num2','sum'],
      actions:['updateNum1','npdateNum2']
    })
  },

  1. 页面渲染store成员
<view>{{num1}}+{{num2}}={{sum}}</view>
  // data-step传递过去 1|-1 ,让store.js中的方法 +=num1 来更新,这里绑定方法
<van-button type="priary" bindtap="btn1" data-step="{{1}}">num1+1</van-button>
<van-button type="danger" bindtap="btn1" data-step="{{-1}}">num1-1</van-button>
btn1(e){
    console.log(e);
  // 打印出型参,看看包含什么...
  //这时,直接调用updateNum1方法即可
    this.updateNum1(e.target.dataset.step)
  },

在组件中使用store的成员
  1. app.json引入组件

在这里插入图片描述

"my-numbers":"./conponents/numbers/numbers" //app.json
<my-numbers>123</my-numbers>//页面中使用 
  1. 同样,在组件.js文件中按需导入才能使用

在这里插入图片描述

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

behaviors:[storeBindingsBehavior], //component中与data平级
  1. 声明数据源
// behaviors下边同级声明
storeBindings:{
    // 数据源
    store,
    fields:{
      num1:'num1', //引号内代表"store里的num1"=>相当于 num1:()=>store.num1
      num2:'num2',
      sum:'sum'
    },
    actions:{
      updateNum2:'updateNum2'
    }
  },
  1. 组件中使用,组件.wxml
<view>{{num1}}+{{num2}}={{sum}}</view>
<van-button type="priary" bindtap="btn2" data-step="{{1}}">num2+1</van-button>
<van-button type="danger" bindtap="btn2" data-step="{{-1}}">num2-1</van-button>
methods: {
    btn2(e){
        this.updateNum2(e.target.dataset.step)
    }
  }
  1. 至此,可以发现 ”一变则变“,页面中的数据全部改变,这就是共享数据~~
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值