Component 构造器

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

详细的参数含义和使用请参考 Component 参考文档

  1. Component({
  2. behaviors: [],
  3. properties: {
  4. myProperty: { // 属性名
  5. type: String,
  6. value: ''
  7. },
  8. myProperty2: String // 简化的定义方式
  9. },
  10. data: {}, // 私有数据,可用于模板渲染
  11. lifetimes: {
  12. // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  13. attached: function () { },
  14. moved: function () { },
  15. detached: function () { },
  16. },
  17. // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  18. attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
  19. ready: function() { },
  20. pageLifetimes: {
  21. // 组件所在页面的生命周期函数
  22. show: function () { },
  23. hide: function () { },
  24. resize: function () { },
  25. },
  26. methods: {
  27. onMyButtonTap: function(){
  28. this.setData({
  29. // 更新属性和数据的方法与更新页面数据的方法类似
  30. })
  31. },
  32. // 内部方法建议以下划线开头
  33. _myPrivateMethod: function(){
  34. // 这里将 data.A[0].B 设为 'myPrivateData'
  35. this.setData({
  36. 'A[0].B': 'myPrivateData'
  37. })
  38. },
  39. _propertyChange: function(newVal, oldVal) {
  40. }
  41. }
  42. })

使用 Component 构造器构造页面

事实上,小程序的页面也可以视为自定义组件。因而,页面也可以使用 Component 构造器构造,拥有与普通组件一样的定义段与实例方法。但此时要求对应 json 文件中包含 usingComponents 定义段。

此时,组件的属性可以用于接收页面的参数,如访问页面 /pages/index/index?paramA=123&paramB=xyz ,如果声明有属性 paramAparamB ,则它们会被赋值为 123xyz

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

代码示例:

  1. {
  2. "usingComponents": {}
  3. }
  1. Component({
  2. properties: {
  3. paramA: Number,
  4. paramB: String,
  5. },
  6. methods: {
  7. onLoad: function() {
  8. this.data.paramA // 页面参数 paramA 的值
  9. this.data.paramB // 页面参数 paramB 的值
  10. }
  11. }
  12. })

使用 Component 构造器来构造页面的一个好处是可以使用 behaviors 来提取所有页面中公用的代码段。

例如,在所有页面被创建和销毁时都要执行同一段代码,就可以把这段代码提取到 behaviors 中。

代码示例:

  1. // page-common-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('./page-common-behavior')
  3. Component({
  4. behaviors: [pageCommonBehavior],
  5. data: { /* ... */ },
  6. methods: { /* ... */ },
  7. })
  1. // 页面 B
  2. var pageCommonBehavior = require('./page-common-behavior')
  3. Component({
  4. behaviors: [pageCommonBehavior],
  5. data: { /* ... */ },
  6. methods: { /* ... */ },
  7. })