之前 的 微信小程序开发框架 wepy 试水记录 记录了 wepy的安装过程,
今天有时间,又简单做了个小Demo试试,主要包含 事件, 组件通讯,组件之间事件传输等等!
一 组件事件传输
首先 在 index.wpy
中, 引入我们的测试组件
import test from '../components/test
定义组件,定义一些数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//定义组件 components = { footer:footer, header:header, list:list, search:search, test:test } //定义数据 data={ imgUrls: [ 'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg' ], indicatorDots: false, autoplay: true, interval: 5000, duration: 1000, parentTitle: '这是啥啥啥' }; |
首先的话,我们看看组件之间的事件传输,
基类提供三个方法 wepy.component
,$broadcast
,$emit
,$invoke
因此任一页面或任一组件都可以调用上述三种方法实现通信与交互,
$broadcast
事件是由父组件发起,所有子组件都会收到此广播事件,除非事件被手动取消。事件广播的顺序为广度优先搜索顺序
$emit
与$broadcast
正好相反,事件发起组件的父组件会依次接收到$emit
事件
$invoke
是一个组件对另一个组件的直接调用,通过传入的组件路径找到相应组件,然后再调用其方法。
如果想在
Page_Index
中调用组件A的某个方法:
this
.$invoke('ComA', 'someMethod', 'someArgs');
如果想在组件A中调用组件G的某个方法:
this.$invoke('./../ComB/ComG', 'someMethod', 'someArgs');
我们打开 test.wpy
组件, 在组件渲染完成事件中调用一次父组件的方法!
1 2 3 |
onLoad () { this.$emit('some-event'); } |
在父组件也就是 index.wpy
里面接收事件
1 2 3 4 5 6 |
//组件事件 events = { 'some-event':function () { console.info('你好,我是子组件调用夫组件的方法'); } } |
父组件给子组件传递事件
1 2 3 4 |
onLoad = function () { this.$broadcast('testClick'); this.setData({title: 'this is title'}); } |
子组件里
1 2 3 4 5 |
events = { testClick(){ console.info('我是夫组件调用的子组件方法'); } }; |
二 ,组件
props
数据传输
在父组件里先import 进来组件然后 使用, 和Vue类似
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import wepy from 'wepy' import footer from '../components/common/footer' import header from '../components/common/header' import list from '../components/list' import search from '../components/panel' import test from '../components/test' export default class Index extends wepy.page { config = { navigationBarTitleText: 'test' }; //定义组件 components = { footer:footer, header:header, list:list, search:search, test:test }, |
数据定义
1 2 3 4 5 6 7 8 9 10 11 12 |
data={ imgUrls: [ 'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg', 'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg' ], indicatorDots: false, autoplay: true, interval: 5000, duration: 1000, parentTitle: '这是啥啥啥' }; |
index.wpy的模板里
1 |
<test title="我是夫组件传下来的" :img="imgUrls" :syncTitle.sync="imgUrls" :twoWayTitle="parentTitle"></test> |
test.wpy 组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import wepy from 'wepy' export default class Test extends wepy.component { props = { title:String, syncTitle: {}, twoWayTitle: { type: Number, default: 50, twoWay: true } }; data = { listd: [] }; events = { testClick(){ console.info('我是夫组件调用的子组件方法'); } }; onLoad () { console.log(this.title); console.log(this.syncTitle); console.log(this.twoWayTitle); this.$emit('some-event'); } } |
附加==> 小程序Wepy文档
等有时间了,自己也写个小程序玩玩!!