微信小程序——页面与组件,组件与组件,组件与模版间的数据传递

最近在微信小程序开发中使用到自定义组件Components

 

1  组件传递内容给页面

给组件设置compclick事件,通过this.triggerEvent('compclick', data) 触发该compclick事件并传递内容data,在页面用onCompClick事件监听传递过来的数据。 

组件wxml

<view class="comp-a" bindtap="onTap">
  <view>我是组件a</view>
</view>

组件js

Component({
  properties: {},
  methods: {
    onTap(){
      let data= '我是 comp-a 组件'
      this.triggerEvent('compclick', data) // 触发组件上的“compclick”事件
    } 
  }
})

调用的页面wxml

<comp-a bindcompclick="onCompClick"></comp-a>

调用的页面js

Page({
  // 监听compclick事件
  onCompClick(e) {
    console.log('接收a组件传递的内容:', e.detail) // '我是 comp-a 组件'
  }
})  

 

2  组件与组件通信

两个无任何关联的组件:通过全局变量或本地缓存传递数据

两个有关联的组件(同一个父页面下): 通过上面的方法,用组件 => 页面 => 组件的方式传递数据。

2.页面之间的通信

2-1.使用全局变量 app.globalData

2-2.使用本地缓存 wx.setStorageSync

2-3.url传递

// A页面-传递数据

// 需要注意的是,wx.switchTab 中的 url 不能传参数。
wx.navigateTo({
  url:'/pages/pageB/pageB?name=raymond&gender=male'
})

// B页面-接收数据
// 通过onLoad的option...
Page({
  onLoad(option){ 
    console.log(option.name +'is'+ option.gender)// raymond is male
    this.setData({option: option }) 
  }
})

2-2 后一级页面对前一级页面的数据的管理(通过获取到页面对象进行数据操作)

这个方法的精髓,是通过获取到其他页面的对象原型, 然后通过原型方法 setData 对当前对象管理的 data 进行修改 

示例如下:

//pageE.js

Page({
  data: {
    index:1
  }
})

当跳转到下一个页面 F 之后,假定在 F 中有操作需要对 E 中的数据有修改,则可以使用以下方法:

这个方法可以操作页面堆栈里面的页面的数据, 可以做到让后一级页面对上级页面群的数据管理 。

// pageF.js

Page({ 
  changeIndexInE(){
    var pages = getCurrentPages();
    var prevPage = pages[pages.length -2];
    prevPage.setData({ 
      index:0
    })
  }
})

 

3,页面与模板之间的通信

传入模板的除了变量,还可以是事件方法对象。例如,模板中的点击事件,可以传递到使用模板的元素中。

页面

Page({
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2016-09-15'
    }
  }
})


参考文档:JoeWcc大神   https://www.jianshu.com/p/2ad63f6295fd

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值