小程序
1.小程序中的组件必须在components创建,创建方法:
第一步: 先创建一个文件夹,然后在文件夹上右击(新建Component)注意【千万不要点新建page】
第二步: 点击(新建Component)后,会在你的文件夹中出现四个文件,就说明创建成功了!
然后将json文件中"component": true, 一般会自动生产
第三部: 在父组件的json文件中起名,
注意:如果全局都经常共用这个组件 可以写到app.json 里面
第四部: 直接在需要用到的组件中使用就可以了
组件化开发js文件中:
组件生命周期
组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。
其中,最重要的生命周期是 created attached detached ,包含一个组件实例生命流程的最主要时间点。
- 组件实例刚刚被创建好时,
created生命周期被触发。此时,组件数据this.data就是在Component构造器中定义的数据data。 此时还不能调用setData。 通常情况下,这个生命周期只应该用于给组件this添加一些自定义属性字段。 - 在组件完全初始化完毕、进入页面节点树后,
attached生命周期被触发。此时,this.data已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进行。 - 在组件离开页面节点树后,
detached生命周期被触发。退出一个页面时,如果组件还在页面节点树中,则detached会被触发。
定义生命周期方法
生命周期方法可以直接定义在 Component 构造器的第一级参数中。
自小程序基础库版本 2.2.3 起,组件的的生命周期也可以在 lifetimes 字段内进行声明(这是推荐的方式,其优先级最高)。父子传值
Component({
lifetimes: {
attached: function() {
// 在组件实例进入页面节点树时执行
},
detached: function() {
// 在组件实例被从页面节点树移除时执行
},
},
// 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
attached: function() {
// 在组件实例进入页面节点树时执行
},
detached: function() {
// 在组件实例被从页面节点树移除时执行
},
// ...
})
在 behaviors 中也可以编写生命周期方法,同时不会与其他 behaviors 中的同名生命周期相互覆盖。但要注意,如果一个组件多次直接或间接引用同一个 behavior ,这个 behavior 中的生命周期函数在一个执行时机内只会执行一次。
可用的全部生命周期如下表所示。
| 生命周期 | 参数 | 描述 | 最低版本 |
|---|---|---|---|
| created | 无 | 在组件实例刚刚被创建时执行 | 1.6.3 |
| attached | 无 | 在组件实例进入页面节点树时执行 | 1.6.3 |
| ready | 无 | 在组件在视图层布局完成后执行 | 1.6.3 |
| moved | 无 | 在组件实例被移动到节点树另一个位置时执行 | 1.6.3 |
| detached | 无 | 在组件实例被从页面节点树移除时执行 | 1.6.3 |
| error | Object Error | 每当组件方法抛出错误时执行 | 2.4.1 |
组件所在页面的生命周期
还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义。其中可用的生命周期包括:
| 生命周期 | 参数 | 描述 | 最低版本 |
|---|---|---|---|
| show | 无 | 组件所在的页面被展示时执行 | 2.2.3 |
| hide | 无 | 组件所在的页面被隐藏时执行 | 2.2.3 |
| resize | Object Size | 组件所在的页面尺寸变化时执行 | 2.4.0 |
Component({
pageLifetimes: {
show: function() {
// 页面被展示
},
hide: function() {
// 页面被隐藏
},
resize: function(size) {
// 页面尺寸变化
}
}
})
1.子传父
子传父数据 思路: 在父组件js中创建一个自定义方法:getList() 当触发父组件中子组件的事件:bind:categoryChangeEvent的时候,就会触发父组件js中的getList事件, 怎么在子组件中触发bind:getList呢:使用this.triggerEvent(‘getList’,{}) 对象随意传不传都行
写法: 父组件wxml:
<page-list bind:getList="getList"></page-list>
父组件js:getList(e){ console.log(e.detail.a) } 子组件js:this.triggerEvent('getList',{ ....})
2.父传子
父传子就简单多了 1.在父组件中先使用子组件 例如: 思路: 在夫组件中已经引入子组件: 可以给page-lsit一个id或者class 然后再子组件中自定义一个方法例如:fillData(e){},给方法一个形参 再夫组件js中调用this.selectComponent(’#page-lsit‘)获取到子组件【#page-lsit就是组件中的id名,也可以用class那么#就要变成 .】 获取到子组件就可以调用子组件中的方法,所以我们可以把父组件中的数据调用子组件的自定义方法赋值过去。 写法: 父组件wxml: 父组件js:例如:this.selectComponent('#page-lsit').fillData(this.data.msg) 子组件:fillData(e){console.log(e) }