微信小程序页面传值、组件间通信总结

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便

捷地获取和传播,同时具有出色的使用体验。对于微信小程序,前端开发应该不陌生,目前也

是非常火,很多公司都会进行开发。对于小程序的优点我就不到这过多描述了,今天我是想来

总结下微信小程序页面和组件传值。

1.页面与页面传值-跳转的url带参传值

微信小程序页面直接传值我们经常用到的是页面URL跳转传值,跳转到的页面通过到生命周

onLoad里面接收。

//A页面

Page({

data:{

},

linkTo:function(){//页面事件绑定方法

let data = 'hello world';

wx.navigateTo({

url: '/pages/my/index?name=' + data,

})

}

})

//B页面

Page({

data:{

name:' '

},

onLoad:function(option){//接收数据

this.setData({

name: option.name

})

}

})

如果页面有多个值要传,直接用&符合链接起来就可以了。

比如'/pages/my/index?name=' + data1+'&number='+data2;

2.页面与页面传值-全局globalData传值

//app.js

App({

onLaunch (options) {

// Do something initial when launch.

},

onShow (options) {

// Do something when show.

},

onHide () {

// Do something when hide.

},

onError (msg) {

console.log(msg)

},

globalData: {

name:'hello world'

}

})

//A页面

const app = getApp();//获取全局对象

Page({

data:{

},

onLoad:function(){

let name = app.globalData.name;

console.log(name);//hello world

}

})

全局数据的拿去是通过拿去globalData对象,再到其他页面获取,当然你也可以

修改全局对象里面数据其他页面从新去获取。

//A页面

const app = getApp();//获取全局对象

Page({

data:{

},

onLoad:function(){

app.globalData.name='微信小程序'; //修改全局数据

}

})

//B页面

const app = getApp();//获取全局对象

Page({

data:{

},

onLoad:function(){

let name = app.globalData.name;

console.log(name);//微信小程序

}

})

2.页面与页面传值-页面数据缓存wx.setStorageSync(KEY,DATA)

//A页面

Page({

data:{

},

onLoad:function(){

wx.setStorage({

key:"name",

data:"hello world"

})

}

})

//B页面

Page({

data:{

},

onLoad:function(){

var value = wx.getStorageSync('name');

console.log(value);// hello world

}

})

此处缓存数据要用同步wx.setStorageSync(),因为异步有可能数据或者有可能会获取不到

下面我们来说说 微信小程序组件之前传值

组件间通信

组件间的基本通信方式有以下几种。

WXML 数据绑定:用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容数据

(自基础库版本 2.0.9 开始,还可以在数据中包含函数)。具体在 组件模板和样式 章节中介绍。

事件:用于子组件向父组件传递数据,可以传递任意数据。

如果以上两种方式不足以满足需要,父组件还可以通过 this.selectComponent 方法获取子组件实例对象,这样就可以直接访问组件的任意数据和方法。

说到组件,这里我们先了解组件的使用,组件的js、json文件和页面不一样。

Component构造器

Component({

behaviors: [],

properties: {

myProperty: { // 属性名

type: String,

value: ''

},

myProperty2: String // 简化的定义方式

},

data: {}, // 私有数据,可用于模板渲染

lifetimes: {

// 生命周期函数,可以为函数,或一个在methods段中定义的方法名

attached: function () { },

moved: function () { },

detached: function () { },

},

// 生命周期函数,可以为函数,或一个在methods段中定义的方法名

attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖

ready: function() { },

pageLifetimes: {

// 组件所在页面的生命周期函数

show: function () { },

hide: function () { },

resize: function () { },

},

methods: {

onMyButtonTap: function(){

this.setData({

// 更新属性和数据的方法与更新页面数据的方法类似

})

},

// 内部方法建议以下划线开头

_myPrivateMethod: function(){

// 这里将 data.A[0].B 设为 'myPrivateData'

this.setData({

'A[0].B': 'myPrivateData'

})

},

_propertyChange: function(newVal, oldVal) {

}

}

})

使用 Component 构造器构造页面

{

"component": true,//这里是它把定义成组件,要不然引入到页面会报错

}

引入组件

//A页面 json

{

"usingComponents": {

"myComponents": "../../components/myComponents/index",//引入组件

},

}

//A页面 WXML

<myComponent name="hello world"></myComponent>

//myComponent接收数据

Component({

properties: {

name:{

value: "",

type: String //此处设置数据类型 这样 组件就能接收到数据

}

},

methods: {

}

})

组件间通信与事件

监听事件

事件系统是组件间通信的主要方式之一。自定义组件可以触发任意的事件,引用组件的页面可以监听这些事件。监听自定义组件事件的方法与监听基础组件事件的方法完全一致:

<!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 -->

<myComponent bindmyevent="onMyEvent"></myComponent>

<!-- 或者可以写成 -->

<myComponent bind:myevent="onMyEvent"></myComponent>

Page({

onMyEvent: function(e){

e.detail // 自定义组件触发事件时提供的detail对象

}

})

触发事件

自定义组件触发事件时,需要使用triggerEvent方法,指定事件名、detail对象和事件选项

<!-- 在自定义myComponent组件中 -->

<button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>

Component({

properties: {},

methods: {

onTap: function(){

var myEventDetail = {} // detail对象,提供给事件监听函数

var myEventOption = {} // 触发事件的选项

this.triggerEvent('myevent', myEventDetail, myEventOption)

}

}

})

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容