返回顶部
首页 > 资讯 > 前端开发 > html >小程序数据通信方法有哪些
  • 202
分享到

小程序数据通信方法有哪些

2024-04-02 19:04:59 202人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关小程序数据通信方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关系划分在讨论都有哪些数据通信方式之前,我们先来定义一下,小程序页面、组件之间都有

这篇文章给大家分享的是有关小程序数据通信方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

关系划分

在讨论都有哪些数据通信方式之前,我们先来定义一下,小程序页面、组件之间都有哪些关系。我总结了一下,大概分为以下3类:

  1. 父子关系

  2. 兄弟关系

  3. 爷孙关系

不同的关系里面,不同角色之间有可能是页面,也有可能是组件,接下来我们就一个个来揭示如何进行数据通信。

父子关系

父子关系一般主要就是两种情况:

父为页面,子为组件 父为组件,子为组件

这种关系可能是频率出现最高的了,毕竟大部分小程序页面都是以小而美为主,可能没有分的太细,碰到这种情况,我们可以通过在父页面监听子组件触发的事件来完成数据通信。

方法一

<!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 -->
<component-tag-name bindmyevent="onMyEvent" />

<!-- 在自定义组件中 -->
<button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>
Component({
 methods: {
  onTap() {
   const myEventDetail = {} // detail对象,提供给事件监听函数
   const myEventOption = {} // 触发事件的选项
   this.triggerEvent('myevent', myEventDetail, myEventOption)
  }
 }
})

小程序数据通信方法有哪些 

兄弟关系

兄弟关系同样分为两种情况:

  1. 兄弟间都是页面

  2. 兄弟间都是组件

兄弟间都是页面

这种关系指的就是,同层次间的页面,简单理解其实就是页面之间的跳转,那从页面A跳到页面B,页面B如何修改页面A的数据呢?

方法二

页面生命周期里面都有 onShow``onHide 方法,通过 localStorage 或者 globalData 作为数据中转,进入到不同页面时,在前一个页面 onShow 里面取出数据,在后一个页面 onShow 里面存储数据,具体做法如下:

<!--app.js-->
App({
  globalData: { count: 0 },
});

<!--页面A-->
onShow(){
  let countValue = wx.getStorageSync('count');
  
  <!--globalData的方式-->
  let countValue = getApp().globalData.count;
  <!---->
  
  if(countValue){
    this.setData({
      count:countValue
    })
  }
  
  <!--globalData的方式 清除数据-->
  getApp().globalData.count = null
  <!---->
}
onHide(){
  wx.removeStorageSync('count') 
}

<!--页面B-->
onShow(){
  <!--globalData的方式-->
  getApp().globalData.count = 1
  <!---->
  
  wx.setStorageSync('count',1);
}

小程序数据通信方法有哪些 

爷孙关系

爷孙关系算是数据通信中最复杂的了,因为不是直系传递,若是通过 方法一 来监听,那就需要通过多级传递事件了,如果节点比较深,可想而知代码是得多难理解且难以维护。

我们可以通过全局创建一个事件总栈 EventBus ,利用这个 EventBus 来订阅发布事件,也就是我们经常使用的 发布订阅模式 ,那在小程序里面如何实现呢?

方法三

<!--第一步:实现一个事件总栈类-->
class EventBus {
  constructor() {
    this.bus = {};
  }
  // on 订阅
  on(type, fun) {
    if (typeof fun !== 'function') {
      console.error('fun is not a function');
      return;
    }
    (this.bus[type] = this.bus[type] || []).push(fun);
  }
  // emit 触发
  emit(type, ...param) {
    let cache = this.bus[type];
    if (!cache) return;
    for (let event of cache) {
      event.call(this, ...param);
    }
  }
  // off 释放
  off(type, fun) {
    let events = this.bus[type];
    if (!events) return;
    let i = 0,
      n = events.length;
    for (i; i < n; i++) {
      let event = events[i];
      if (fun === event) {
        events.splice(i, 1);
        break;
      }
    }
  }
}
module.exports = EventBus;

<!--第二步:在app.js文件中引入-->
import EventBus from './common/event-bus/index.js';
App({
  eventBus: new EventBus(),
});

<!--第三步:在父页面或者父组件中监听某个事件-->
onLoad: function(options) {
  app.eventBus.on('add-count', this.addCount);
}
onUnload: function(options) {
  app.eventBus.off('add-count', this.addCount);
}


<!--第四步:在子组件里面触发事件-->
methods: {
  addCount() {
    app.eventBus.emit('add-count');
  }
}

小程序数据通信方法有哪些

除此之外,还有一种方式,我们可以在每个页面 onLoad 周期里面将该页面的 pageModel 对象缓存起来,之后在孙辈组件里面拿到祖孙的页面对象,从而触发祖孙页面对象对应的方法。

<!--第一步:实现一个pageModel,用来缓存页面对象-->
class PageModel {
  constructor() {
    this.pageCache = {};
  }

  add(page) {
    let pagePath = this._getPageModelPath(page);
    this.pageCache[pagePath] = page;
  }

  get(path) {
    return this.pageCache[path];
  }

  delete(page) {
    delete this.pageCache[this._getPageModelPath(page)];
  }
  <!--这一段代码是关键,存储的是__route__属性-->
  _getPageModelPath(page) {
    return page.__route__;
  }
}

export default PageModel ;

<!--第二步:app.js中引入-->
import PageModel from './common/page-model/index.js';

App({
  pageModel: new PageModel(),
});

<!--第三步:页面onLoad周期里缓存页面-->
onLoad: function(options) {
  app.pageModel.add(this);
}

<!--第四步:子孙获取祖辈方法-->
methods: {
  addCount() {
    app.pageModel.get('pages/communicate/index').addCount();
  }
}

小程序数据通信方法有哪些

感谢各位的阅读!关于“小程序数据通信方法有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 小程序数据通信方法有哪些

本文链接: https://lsjlt.com/news/73587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 小程序数据通信方法有哪些
    这篇文章给大家分享的是有关小程序数据通信方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关系划分在讨论都有哪些数据通信方式之前,我们先来定义一下,小程序页面、组件之间都有...
    99+
    2024-04-02
  • 微信小程序推广有哪些方法
    这篇文章主要介绍微信小程序推广有哪些方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1,关注公众号公众号现在基本上是每个企业都有的新媒体平台,很多公众号还搭载着商城、会员管理等功能,是很好的留存用户的方式,关注公众...
    99+
    2023-06-27
  • 微信小程序推广的方法有哪些
    这篇“微信小程序推广的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序推广的方法有哪些”文章吧。巧用微信入...
    99+
    2023-06-27
  • 微信小程序WXS注释的方法有哪些
    本篇内容主要讲解“微信小程序WXS注释的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序WXS注释的方法有哪些”吧!WXS 主要有 3 种注释的方法。示例代码:<!--&...
    99+
    2023-06-26
  • 微信小程序WXS语言数据类型有哪些
    本文小编为大家详细介绍“微信小程序WXS语言数据类型有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序WXS语言数据类型有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据类型WXS 语言目前共...
    99+
    2023-06-26
  • 微信小程序api有哪些
    这篇文章主要介绍微信小程序api有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  API  框架提供丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等。  说明:  wx....
    99+
    2023-06-26
  • 微信小程序常用的推广方法有哪些
    本篇内容介绍了“微信小程序常用的推广方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!微信小程序该怎样进行推广1.场景塑造现在企业和商...
    99+
    2023-06-27
  • 小程序页面间有哪些传递数据的方法
    小程序页面间传递数据的方法有: 使用全局变量实现数据传递,app.js和app.wxss中的代码都是全局生效的,实现传递数据的代码。//往globalData设置值getApp().globalData.data = &...
    99+
    2024-04-02
  • qt进程通信的方法有哪些
    Qt进程间通信的方法有以下几种:1. 信号与槽:可以在不同的对象之间发送和接收信号,实现进程间的通信。通过QObject的子类的信号...
    99+
    2023-09-13
    qt
  • 微信小程序页面函数有哪些
    微信小程序页面中常用的函数有以下几种延迟执行setTimeout(function () {//要延时执行的代码}, 1000) //延迟时间 这里是1秒错误窗口wx.showToast({title: '发布成功',icon: 'succ...
    99+
    2024-04-02
  • 微信小程序子组件传值的方法有哪些
    微信小程序子组件传值的方法有以下几种:1. 使用父组件的properties属性来传递值:在子组件中,通过properties定义需...
    99+
    2023-09-29
    微信小程序
  • 微信小程序框架有哪些
    常见的微信小程序框架有:1.WeUI ,微信原生视觉样式库;2.mpvue,基于Vue.js的小程序前端框架;3.wepy,小程序组件化开发框架;4.iView Weapp,微信小程序UI组件库;5.weweb,兼容小程序语法的前端框架;6...
    99+
    2024-04-02
  • 微信小程序有哪些事件
    微信小程序中常见的事件有:1.touchstart,手指触摸时触发;2.touchmove,手指移动时触发;3.touchend,手指结束触摸时触发;4.touchcancel,手指触摸被打断时触发;5.tap,手指触摸后又马上离开时触发;...
    99+
    2024-04-02
  • 微信小程序有哪些功能
    这篇文章主要介绍“微信小程序有哪些功能”,在日常操作中,相信很多人在微信小程序有哪些功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序有哪些功能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!什么...
    99+
    2023-06-27
  • 微信小程序有哪些入口
    这篇文章主要介绍了微信小程序有哪些入口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、短视频入口现在的短视频也是推广的一种手段,而有很多的人对短视频有很大的兴趣,所以,把小...
    99+
    2023-06-27
  • 微信小程序有哪些优点
    这篇文章给大家分享的是有关微信小程序有哪些优点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。提供一个新的开发平台许多公司都想开发自己的APP,但是这需要太多的人力和物力。微信小程序的出现解决了他们的问题。只需输入...
    99+
    2023-06-27
  • 微信小程序入口有哪些
    小编给大家分享一下微信小程序入口有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1,微信搜索门户可以说,微信搜索是微信生态系统中重要的交通门户。您正在寻找小程...
    99+
    2023-06-27
  • 微信小程序版本有哪些
    小编给大家分享一下微信小程序版本有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!小程序的版本版本说明开发版本使用开发者工具,可将代码上传到开发版本中。 开发版本只保留每人最新的一份上传的代码。点击提交审核,可将代码提交...
    99+
    2023-06-26
  • android线程间通信的方法有哪些
    Android线程间通信的方法有以下几种:1. Handler:Handler是Android中最常用的线程间通信方式。它可以将消息...
    99+
    2023-08-26
    android
  • qt进程间通信的方法有哪些
    Qt进程间通信的方法有以下几种: 信号与槽:通过Qt的信号与槽机制,可以在不同的进程之间进行通信。一个进程可以发射信号,另一个进...
    99+
    2023-10-21
    qt
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作