赞
踩
App({
// 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onLaunch: function () {
},
// 当小程序启动,或从后台进入前台显示,会触发 onShow
onShow: function (options) {
},
// 当小程序从前台进入后台,会触发 onHide
onHide: function () {
},
// 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
onError: function (msg) {
}
})
// 生命周期函数--监听页面加载(只会调用一个) onLoad: function (options) { // options 获取页面参数 this.getColors() }, // 生命周期函数--监听页面初次渲染完成(只会调用一次) wx.setNavigationBarTitle 在这里使用 动态设置当前页面的标题 onReady: function () { // 动态设置当前页面的标题 wx.setNavigationBarTitle({ title: this.data.query.title }) }, // 生命周期函数--监听页面显示 onShow: function () { }, // 生命周期函数--监听页面隐藏 onHide: function () { }, // 生命周期函数--监听页面卸载 (只会调用一次) onUnload: function () { },
在小程序组件中,最重要的生命周期函数有三个,分别是created,attached,detached.它们的各自特点如下:
在小程序组件中,生命周期函数可以直接定义在 Component 构造器的第一级参数中,可以在lifetimes 字段内进行声明 (这是推荐的方式,其优先级最高),代码如下:
Component({
// 推荐用法
lifetimes:{
attached(){ },
detached(){ }
},
// 下面是旧的定义方式
attached(){ },
detached(){ }
})
在页面的 .json 配置文件中引用组件的方式,叫做"局部引用".代码如下:
在 页面.json 中
{
"usingComponents": {
"my-test1":"/components/test/test"
}
}
在 页面.wxml 中
<my-test1></my-test1>
在 app.json 全局配置文件中引用组件的方式,叫做 “全局引用”,代码如下:
在 app.json 中
{
"usingComponents": {
"my-test1":"/components/test/test"
}
}
在任何一个 .wxml 中都可以使用
<my-test1></my-test1>
组件样式隔离的注意点:
app.wxss 中的全局样式对组件无效
只有 class 选择器会有样式隔离效果,id选择器,属性选择器,标签选择器不受样式隔离的影响
1.修改组件的样式隔离选项
自定义组件的样式隔离特性能够防止组件内样式互相干扰的问题
在 组件.js 中
options:{
styleIsolation:'isolated'
}
在 组件.json 中
{
"component": true,
"usingComponents": {},
"styleIsolation":"isolated"
}
在 组件.js 中 Component({ /** * 组件的初始数据 */ data: { count:0 }, /** * 组件的方法列表 */ methods: { addCount(){ // 事件处理函数 this.setData({ count:this.data.count + 1 }) this._showCount() }, _showCount(){ // 自定义方法建议以 '-' 开头 } } })
在 组件.js 中 组件的 /** * 组件的属性列表 */ properties: { // 第一种方式: 简化方式 // max: Number // 第二种方式: 完整的定义方式 max:{ type:Number, // 属性值的数据类型 value:10 // 属性默认值 } } methods: { addCount(){ // 事件处理函数 this.setData({ count:this.data.count + 1, max:this.properties.max + 1 // properties 同样也可以使用this.setData进行修改 }) this._showCount() }, _showCount(){ // 自定义方法建议以 '-' 开头 } } // index.wxml <!-- max 的值可以自己定义 --> <my-test1 max="9"></my-test1> // 组件.wxml <view>{{max}}</view> 可以直接使用 max
// 数据监听
observers:{
// n1 n2 都是 data 里面的数据
// newn1 newn2 是新值
'n1 , n2'(newn1,newn2){
this.setData({
sum:Number(newn1) + Number(newn2)
})
}
}
data: {
rgb:{
r:0,
g:0,
b:0
},
fullColor:'0,0,0'
}
observers:{
'rgb.**':function(obj){
this.setData({
fullColor:`${obj.r},${obj.g},${obj.b}`
})
}
}
1.父组件的 .wxml
<my-test4 count="{{count}}"></my-test4>
<view>------------</view>
<view>父组件的值: {{count}}</view>
2.在 properties 写入传过来的数据 (子组件进行接收)
/**
* 组件的属性列表
*/
properties: {
count:Number
},
3.子组件的 .wxml
<view>{{count}}</view>
事件绑定用于实现子向父传值,可以传递如何类型的数据.步骤如下:
示例代码如下:
第一步 syncCount(){ } 第二步 bind:可以自定义="syncCount" 自定义事件 <my-test4 count="{{count}}" bind:sync="syncCount"></my-test4> <view>------------</view> <view>父组件的值: {{count}}</view> 第三步 data: { count:0 }, methods: { addCount(){ this.setData({ count:this.data.count + 1 }) // 触发自定义事件,将数值同步给父组件 this.triggerEvent('sync',{value:this.data.count}) } } 第四步 syncCount(e){ console.log(e.detail) // e 是子组件传过来的参数 this.setData({ count:e.detail.value }) }
可在父组件里调用 this.selectComponent(‘id或class选择器’),获取子组件的实例对象,从而直接访问子组件的任意数据和方法.调用时需要传入一个选择器,例如 this.selectComponent(’.my-component’)
// 父组件的 .wxml
<my-test4 count="{{count}}" bind:sync="syncCount" class="customA" id="cA"></my-test4>
<view>父组件的值: {{count}}</view>
<button bindtap="getChild">获取子组件的实例对象</button>
// 父组件的 .js
getChild(){
// 注意点: 下面的参数不能传递标签选择器 'my-test4',会返回null
const child = this.selectComponent('.customA')
console.log(child)
// child.setData({ // 调用子组件的 setData 方法
// count:child.properties.count + 1
// })
// 还可以调用子组件中的方法 addCount
child.addCount()
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。