# 自定义组件


# 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(){}
  }
})