小程序引用其他页面js_来聊聊小程序页面之间如何通信

c800636f6d8d5fa50afdeb040b6825a8.png

小程序页面之间如何通信?

首先将通信的模型列举出来, 分为以下几种

  • 兄弟页面间通信
  • 父路径页面向子路径页面通信
  • 子路径页面向父路径页面通信

通信的方式

  • localStorage 本地存储
  • globalData 全局对象
  • eventBus 发布订阅
  • PageModel 缓存整个pageModel至globalData

LocalStorage

利用onShow/onHide激活方法,通过localStorage传递数据

 onShow(){ let newHello = wx . getStorageSync ( '__data'); if (newHello ){ this .setData({ helloMsg: newHello });   // 清空上次通信数据  wx.clearStorageSync ( '__data' ); }} 

GlobalData

同localStorage一样,利用onShow/onHide激活方法,通过读写小程序globalData完成数据传递

 let app = getApp(); onShow(){ let newHello = app.$$data.helloMsg; if (newHello){ this.setData({ helloMsg: newHello }); // 清空上次通信数据 app.$$data.helloMsg =null; } }

EventBus

eventBus基本适用合任何JS可以运行的环境, 通过订阅一个事件,然后再发布事件的时间点收到消息

// 首先你得实现一个eventBus, 这里假设你已经实现了..// Page A onLoad(){ app.pubSub.on('hello',(msg)=>{ this.setData({ helloMsg:'hello :'+ msg }); }); },// Page B onLoad(){ app.pubSub.emit('hello', 'JS每日一题') },

PageModel

缓存页面PageModel, 通信时,直接找到要通信页面的PageModel,进而可以访问通信页面PageModel所有的属性,方法

// 在app.js中add及get实现 this.$$cache ={} add(pageModel){ // 添加时以__route__做为key,方便在其它页面调用 let pagePath =this.__route__; this.$$cache[pagePath]= pageModel; } get(pagePath){ // 同时直接取走相应的pageModel return this.$$cache[pagePath]; }// Page A 在onLoad 时将本身(this)存放到GlobalData中 onLoad(){ app.pages.add(this); },// Page B onLoad(){ // 拿到Page A所有属性及方法 console.log(app.pages.get( 'pages/a/b'))},

总结

  • localstorage 同步会阻塞进程,异步可能会错过最佳取值时机
  • globalData 直接操作内存,比localstorage更快,注意全局变量污染
  • eventBus 方便灵活,推荐使用,注意解绑及重复绑定
  • PageModel 思路很棒,但globalDatac存放的pageModel过多时内存会不会爆不知道~_~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签

webapp开发初期,会碰到在pc端开发好的页面在移动端显示过大的问题,这里需要在html head中加入meta标签来控制缩放下面是对于这个标签的具体说明:viewport 语法介绍:content包含有以下几个属性:height [pixel_value | device-height] ,width [pixel_value | device-w…

用碧海潮声制作的宋体(雅黑宋体)替换Windows7原生的火柴棍式的宋体

第一眼见到Windows7的时候,界面真的非常漂亮,但是当查看文件属性的时候,里面宋体出奇的难看,网上有很多在XP里替换宋体的方法,但是到了Windows7里就不那么好用了,经过多次查找相关方法,终于使用…

最近2个月的生活

最近2个月,心情动荡不定。时而快乐,时而悲伤,时而激动,时而淡定。最近的故事还是比较多的,就按编号来分别描述吧.1.周五,公司举办了2012年年会。 本次年会,是 帅哥和美女展示身材和才艺的机会。…

json动画_three.js动画(四)

ThreeJS的动画系列分为:基础动画、相机控制、变形动画、用骨骼和蒙皮制作动画以及使用外部模型创建动画。用骨骼和蒙皮制作动画用骨骼来做动画时,移动一下骨骼,Three.js必须决定如何相应地迁移附着在骨骼上的皮肤,一起来看吧~~~举…

如何做PHD (1)

做PHD两年了,经验不多,从朋友、导师、教授、名人得到的做PHD的经验却很宝贵,为了不让自己忘记,特此记录,希望对各位已经是PHD或即将成为PHD的朋友有所帮助。 1.多读文章 做PHD与做硕士不一样,计算机的硕士…

sqlite3x library

sqlite3x - C wrapper of SQLite API. http://sourceforge.net/projects/int64/files/SQLite3%20C%2B%2B%20Wrapper/ https://github.com/ptrv/sqlite3x http://wanderinghorse.net/computing/sqlite/ Appendix http://www.sqlite.org/转载于:https://www.cnblogs.com/androidm…

html5监听动画结束,js判断css动画是否完成 animation,transition

气死了,发现这些鸟人讲事情都讲一半,害死初学者。css动画有两种,animation,transition,所以分开来讲。1、animation:css定义 #left1{}html定义:安全那么我们就用#left1来获取元素:/* 监听变换事…

[算法]不用第三个数交换2个数的位置

int a 10; int b 20; 第一种方法: a a b; b a - b; a a - b; 第二种方法: a a ^ b; (^ 语言中是异或的意思,同为0 异为1 1 ^ 1 0, 0 ^ 0 0, 1 ^ 0 1) b a ^ b; a a ^ b; 第三种方法 (这种方法容易越界&#xff09…

四十之后才明白

四十以后才明白:好朋友是应该相互欣赏的,而不是相互利用的。 四十以后才明白:饭应一口一口吃,事要一点一点做。没有一蹴而就的事情,所以就不应该疲于奔命。中年,应该活得从容。 四十以后才明白&#xff1a…

session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

前言公司有一个 Web 管理系统,使用 Tomcat 进行部署。由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作。起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部署。后来随着用的人越来越多&#x…

定义动画名字html,CSS3 animation-name属性怎么用?

css3 animation-name属性是用来检索或设置对象所应用的动画名称,必须与keyframes配合使用,因为动画名称由keyframes定义 ;如果有多个属性值,可以用逗号进行分隔。css3 animation-name属性作用:animation-name 属性为 k…

转: linux 命令行设置网络

原文:http://www.cnitblog.com/201/archive/2009/08/20/60887.html 熟悉使用ifconfig 会非常方便。  ifconfig eth0 新ip 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip 一、修改IP地址 [aeolusdb1 network-scripts]$ vi ifcfg-eth0 DEVIC…

线程中如何使用对象_多线程中如何使用gdb精确定位死锁问题

在多线程开发过程中很多人应该都会遇到死锁问题,死锁问题也是面试过程中经常被问到的问题,这里介绍在c中如何使用gdbpython脚本调试死锁问题,以及如何在程序运行过程中检测死锁。首先介绍什么是死锁,看下维基百科中的定义&#xf…

TypeScript Generics(泛型)

软件工程的一个主要部分就是构建组件,构建的组件不仅需要具有明确的定义和统一的接口,同时也需要组件可复用。支持现有的数据类型和将来添加的数据类型的组件为大型软件系统的开发过程提供很好的灵活性。 在C#和Java中,可以使用"泛型&qu…

Hashtable.ContainsKey跟Hashtable.Contains的区别

最近在用哈希表做项目,发现判断键值的方法有两个 :一个是Contains(object key),一个是ContainsKey(object key),就不知道用哪个才对,后来查了资料才知道,其实这两个方法实现的功能是一样的,都是…

html5清除手机页面缓存文件夹,WebView自动缓存-清除缓存

iOS的Webview加载HTML时会自动缓存JS、CSS等文件,当下次加载HTML时会根据请求的缓存策略是否使用缓存本地的JS和CSS,如果本地有缓存,那么直接返回本地资源(判断是否过期);如果没有本地缓存则向服务器请求地址。1、NSURLRequestCac…

vs2010 快捷键大全

VS2010版快捷键CtrlE,D ----格式化全部代码 CtrlE,F ----格式化选中的代码 CTRL SHIFT B生成解决方案 CTRL F7 生成编译 CTRL O 打开文件 CTRL SHIFT O打开项目 CTRL SHIFT C显示类视图窗口 F4 显示属性窗口 SHIFT F4显示项目属性窗口 CTRL SHIFT E显示资源视图 F12…

swift语言和python区别_Swift为什么能成为编程语言中的黑马?

你好,这里是卖桃者说,今天跟你聊一门年轻又很受欢迎的编程语言,Swift。Swift 是苹果于 2014 年在苹果全球开发者大会(WWDC)上发布的编程语言,它可以与 Objective-C 共同运行于 macOS 和 iOS 平台,用于搭建基于苹果平台…

第一周内容

回到寝室,第一件事情便是想查一下杨老师课上说的“diff”程序。百度了一下,谈到最多的是linux中的diff命令,于是换个关键词,diff工具,发现diffmerge,P4merge,kdiff,TextDiff等等。以…

osgdem的参数表(转)

osgdem的参数表 ParameterDescriptionDefault General -h or --help Display commandline arguments information --task -s Specify a VPB source file containing all commandline options. --so Output the VPB source file for the current run. --report --cache Read the…