自定义组件

Component(Object object)

创建自定义组件,接受一个 Object 类型的参数。

参数

Object object

定义段 类型 是否必填 描述
properties Object Map 否 组件的对外属性,是属性名到属性设置的映射表,不会进行类型强制转换
data Object 否 组件的内部数据,和 properties 一同用于组件的模板渲染
methods Object 否 组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用
behaviors Array 否 类似于mixins和traits的组件间代码复用机制,参见 Behaviors
created Function 否 组件生命周期函数-在组件实例刚刚被创建时执行
attached Function 否 组件生命周期函数-在组件实例进入页面节点树时执行
ready Function 否 组件生命周期函数-在组件布局完成后执行
detached Function 否 组件生命周期函数-在组件实例被从页面节点树移除时执行

生成的组件实例可以在组件的方法、生命周期函数和属性 observer 中通过 this 访问。组件包含一些通用属性和方法。

属性名 类型 描述
data Object 组件数据,包括内部数据



方法名 参数 描述
setData Object newData 设置data并执行视图层渲染
triggerEvent String name, Object detail, Object options 触发事件

代码示例:


Component({

behaviors: [],

properties: {
myProperty: { // 属性名
type: String,
value: ''
},
myProperty2: String // 简化的定义方式
},

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

// 生命周期函数,可以为函数,或一个在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) {

}
}

})

properties 定义

定义段 是否必填 描述
type 是 属性的类型
value 否 属性的初始值

代码示例:

Component({
behaviors: [],

properties: {
myProperty: {
// 属性名
type: String,
value: "",
},
myProperty2: String, // 简化的定义方式
},
});


Behavior(Object object)

注册一个 behavior,接受一个 Object 类型的参数。

参数

Object object

定义段 类型 是否必填 描述
properties Object Map 否 同组件的属性
data Object 否 同组件的数据
methods Object 否 同自定义组件的方法
created Function 否 生命周期函数
attached Function 否 生命周期函数
ready Function 否 生命周期函数
detached Function 否 生命周期函数

代码示例:

// my-behavior.js
module.exports = Behavior({
behaviors: [],
properties: {
myBehaviorProperty: {
type: String
}
},
data: {
myBehaviorData: {}
},
attached: function(){},
methods: {
myBehaviorMethod: function(){}
}
})