Component构造器

定义段与示例方法

解释:Component构造器可用于定义组件,调用Component构造器时可以指定组件的属性、数据、方法等。

字段类型是否必填描述最低版本
propertiesObject Map组件的对外属性,是属性名到属性设置的映射表,属性设置中可包含三个字段, type 表示属性类型、 value 表示属性初始值、 observer 表示属性值被更改时的响应函数
dataObject组件的内部数据,和 properties 一同用于组件的模板渲染
methodsObject组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 组件事件
behaviorsArray.<string>类似于mixins和traits的组件间代码复用机制,参见 behaviors
createdFunction组件生命周期函数,在组件实例进入页面节点树时执行,注意此时不能调用setData,参见 组件生命周期
attachedFunction组件生命周期函数,在组件实例进入页面节点树时执行,参见 组件生命周期
readyFunction组件生命周期函数,在组件布局完成后执行,此时可以获取节点信息,参见 组件生命周期
detachedFunction组件生命周期函数,在组件实例被从页面节点树移除时执行,参见 组件生命周期
externalClassesArray.<string>组件接受的外部样式类,参见组件模板和样式1.13.27
optionsObject Map一些选项(文档中介绍相关特性时会涉及具体的选项设置,这里暂不列举)1.13.27
lifetimesObject组件生命周期声明对象,组件的生命周期:created、attached、ready、detached将收归到lifetimes字段内进行声明,原有声明方式仍旧有效,如同时存在两种声明方式,则lifetimes字段内声明方式优先级最高,参见 组件生命周期1.13.27
pageLifetimesObject组件所在页面的生命周期声明对象,目前仅支持页面的show和hide两个生命周期,参见 组件生命周期1.13.27
definitionFilterFunction定义段过滤器,用于自定义组件扩展,参见自定义组件扩展1.13.27

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

属性名类型描述最低版本
isString组件的文件路径1.13.27
idString节点id1.13.27
datasetString节点dataset1.13.27
dataObject组件数据,包括内部数据和属性值
propertiesObject组件数据,包括内部数据和属性值(与data一致)。
方法名参数描述最低版本
setDataObject newData设置data并执行视图层渲染
hasBehaviorObject检查组件是否具有 behavior (检查时会递归检查被直接或间接引入的所有behavior)1.13.27
triggerEventString name, Object detail触发事件,参见 组件事件
createSelectorQuery创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内, 与 swan.createSelectorQuery().in(this) 是等效2.5.3
createIntersectionObserverObject options创建一个 IntersectionObserver 对象,选择器选取范围为这个组件实例内2.5.3
selectComponentString selector使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象(会被 swan://component-export 影响),在生命周期 onReay 开始时生效
selectAllComponentsString selector使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组
groupSetDataFunction callback立刻执行 callback ,其中的多个 setData 之间不会触发界面进行重复绘制2.10.7

代码示例在开发者工具中预览效果

  1. // 自定义组件js
  2. Component({
  3. properties: {
  4. propName: { // 属性名
  5. type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
  6. value: 'val', // 属性初始值(必填)
  7. observer: function(newVal, oldVal) {
  8. // 属性被改变时执行的函数(可选)
  9. }
  10. }
  11. },
  12. data: {}, // 私有数据,可用于模板渲染
  13. // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  14. attached: function () {},
  15. detached: function () {},
  16. methods: {
  17. onTap: function () {
  18. this.setData({
  19. // 更新属性和数据的方法与更新页面数据的方法类似
  20. });
  21. }
  22. }
  23. });

注意:在 properties 定义段中,属性名应该采用驼峰写法(propsName);在 swan 模板中,指定属性值时则对应使用连字符写法( component-tag-name props-name="props value" )。

使用 Component 构造器构造页面

解释:事实上,一个自定义组件也可以视为一个页面,故页面也可以使用 Component 构造器构造,拥有与普通组件一样的定义段与实例方法,其必要配置项(json)与正常自定义组件一致,即需要有component: true字段。

关于页面传参:从其它页面跳转到由自定义组件构造的页面时,如跳转到页面 /components/custom/custom?paramA=123&paramB=xyz ,你可以在由custom组件构造的页面onLoad生命周期中获取传递的query字段。

注意:页面的生命周期方法(即 on 开头的方法),应写在 methods 定义段中。

代码示例

  1. {
  2. "component": true,
  3. "usingComponents": {}
  4. }
  1. /* /components/custom/custom.js */
  2. Component({
  3. methods: {
  4. onLoad: function(options) {
  5. console.log(options.paramA); // 123
  6. console.log(options.paramB); // xyz
  7. }
  8. }
  9. });

使用 Component 构造器来构造页面的一个好处是可以使用 behaviors 来提取所有页面中公用的代码段。例如,在所有页面被创建和销毁时都要执行同一段代码,就可以把这段代码提取到 behaviors 中。

代码示例在开发者工具中预览效果

  1. // behavior.js
  2. module.exports = Behavior({
  3. attached: function() {
  4. // 页面创建时执行
  5. console.info('Page loaded!')
  6. },
  7. detached: function() {
  8. // 页面销毁时执行
  9. console.info('Page unloaded!')
  10. }
  11. })
  1. // 自定义组件 A
  2. var pageCommonBehavior = require('../behavior.js')
  3. Component({
  4. behaviors: [pageCommonBehavior],
  5. data: { /* ... */ },
  6. methods: { /* ... */ },
  7. })
  1. // 自定义组件 B
  2. var pageCommonBehavior = require('../behavior.js')
  3. Component({
  4. behaviors: [pageCommonBehavior],
  5. data: { /* ... */ },
  6. methods: { /* ... */ },
  7. })

说明

  • 使用 this.data 可以获取内部数据和属性值,但不要直接修改它们,应使用 setData 修改;
  • 属性名应避免以 data- 开头,因为在 SWAN 中,data-name='swan' 会被作为节点 dataset 来处理;
  • 属性名应避免以 prop- 开头 在处理过程中会将该前缀删除;
  • 属性名应避免包含 “ ” 字符, 因为在渲染过程中将会以 “ ” 字符进行拆分。