Component 構(gòu)造器

2020-02-11 17:31 更新

Component 構(gòu)造器可用于定義組件,調(diào)用 Component 構(gòu)造器時(shí)可以指定組件的屬性、數(shù)據(jù)、方法等


定義參數(shù)

選項(xiàng)名類型是否必填說(shuō)明最低版本
propertiesObject組件的對(duì)外屬性,是屬性名到屬性設(shè)置的映射表,屬性設(shè)置中可包含三個(gè)字段,type表示屬性類型、value 表示屬性初始值、observer 表示屬性值被更改時(shí)的響應(yīng)函數(shù)
dataObject組件的內(nèi)部數(shù)據(jù),和 properties 一同用于組件的模版渲染
methodsObject組件的方法,包括事件響應(yīng)函數(shù)和任意的自定義方法,關(guān)于事件響應(yīng)函數(shù)的使用,參見(jiàn)組件事件
behaviorsString/Array類似于 mixins
createdFunction組件生命周期函數(shù),在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行,注意此時(shí)不能調(diào)用setData
attachedFunction組件生命周期函數(shù),在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行
readyFunction組件生命周期函數(shù),在組件布局完成后執(zhí)行
movedFunction組件生命周期函數(shù),在組件實(shí)例被移動(dòng)到節(jié)點(diǎn)樹(shù)另一個(gè)位置時(shí)執(zhí)行
detachedFunction組件生命周期函數(shù),在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行
relationsObject組件間的關(guān)系定義,參加組件間關(guān)系1.12.0.0
optionsObject其他選項(xiàng)
lifetimesObject組件生命周期聲明對(duì)象,優(yōu)先級(jí)比同級(jí)的 attached、detached 等生命周期優(yōu)先級(jí)高
definitionFilterFunction定義過(guò)濾器,用于自定義組件擴(kuò)展,參見(jiàn)自定義組件擴(kuò)展

生成的組件實(shí)例可以在組件的方法、生命周期函數(shù)和屬性 observer 中通過(guò) this 訪問(wèn)。組件包含一些通用屬性和方法。

通用屬性列表

屬性名類型說(shuō)明
isString組件的文件路徑
idString節(jié)點(diǎn) id
datasetString節(jié)點(diǎn) dataset
dataObject組件數(shù)據(jù)
propertiesObject組件數(shù)據(jù)

方法列表

方法名參數(shù)及其類型說(shuō)明最低版本
setDataObject data設(shè)置 data
hasBehaviorObject behavior檢查組件是否具有 behavior
triggerEventString eventName, Object detail, Object options觸發(fā)事件
selectComponentString selector, Function callback使用選擇器選擇組件實(shí)例節(jié)點(diǎn),返回匹配到的第一個(gè)組件實(shí)例對(duì)象,此方法為異步方法,返回值會(huì)在請(qǐng)求完成后傳入 callback
selectAllComponentsString selector, Function callback使用選擇器選擇組件實(shí)例節(jié)點(diǎn),返回匹配到的全部組件實(shí)例對(duì)象組成的數(shù)組,此方法為異步方法,返回值會(huì)在請(qǐng)求完成后傳入 callback
getRelationNodesString relationKey , Function callback獲取這個(gè)關(guān)系所對(duì)應(yīng)的所有關(guān)聯(lián)節(jié)點(diǎn),參見(jiàn) 組件間關(guān)系。 此方法為異步方法,返回值會(huì)在請(qǐng)求完成后傳入 callback1.12.0.0
提示selectComponent、selectAllComponents、getRelationNodes API 均為異步 API,需要指定回調(diào)函數(shù)。
提示selectComponent、selectAllComponents 在 1.16.2.0 版本后支持同步寫法。開(kāi)發(fā)者需要保證在調(diào)用 API 時(shí),頁(yè)面已經(jīng)渲染完畢,比如頁(yè)面的 onReady、setData 的回調(diào)之后。

代碼示例

Component({
  behaviors: [],

  properties: {
    myProperty: {
      // 類型(必填),目前接受的類型包括:String, Number, Boolean, Object, Array, null(表示任意類型)
      type: String,

      // 屬性初始值(可選),如果未指定則會(huì)根據(jù)類型選擇一個(gè)
      value: '',

      // 屬性被改變時(shí)執(zhí)行的函數(shù)(可選),也可以寫成在 methods 段中定義的方法名字符串, 如:'_propertyChange'
      observer: function(newVal, oldVal, changedPath) {
         // 通常 newVal 就是新設(shè)置的數(shù)據(jù), oldVal 是舊數(shù)據(jù)
      }
    },
    myPropertyB: String // 簡(jiǎn)化的定義方式
  },

  // 私有數(shù)據(jù),可用于模版渲染
  data: {},

  // 生命周期函數(shù),可以為函數(shù),或一個(gè)在 methods 段中定義的方法名
  attached: function () {
    this.selectComponent('.class-name', function(res) {
      console.log(res)
    })

    //
  },
  ready: function() { },

  // 組件自定義方法
  methods: {
    onMyButtonTap: function(){
      this.setData({ ... })
    },

    _myPrivateMethod: function(){
      // 這里將 data.A[0].B 設(shè)為 'test'
      this.setData({
        'A[0].B': 'test'
      })
    },

    _propertyChange: function(newVal, oldVal) {

    }
  }
})

注意:在 properties 定義中,屬性名采用駝峰寫法(propertyName);在 ttml/wxml 中,指定屬性值時(shí)則對(duì)應(yīng)使用連字符寫法(my-component property-name="value"),應(yīng)用于數(shù)據(jù)綁定時(shí)采用駝峰寫法(attr="{{propertyName}}")。


使用 Component 構(gòu)造器構(gòu)造頁(yè)面

小程序的頁(yè)面也可以視為自定義組件。因而,頁(yè)面也可以使用 Component 構(gòu)造器構(gòu)造,擁有與普通組件一樣的定義與實(shí)例方法。但此時(shí)要求對(duì)應(yīng) json 文件中包含 usingComponents 定義段。

此時(shí),組件的屬性可以用于接收頁(yè)面的參數(shù),如訪問(wèn)頁(yè)面 /pages/index/index?paramA=123?mB=xyz ,如果聲明有屬性 paramA 或 paramB,則它們會(huì)被賦值為 123 或 xyz 。

代碼示例

{
  "usingComponents": {}
}

在組件代碼中

Component({
  properties: {
    paramA: Number,
    paramB: String
  },

  methods: {
    onLoad() {
      this.data.paramA; // 頁(yè)面參數(shù) paramA 的值
      this.data.paramB; // 頁(yè)面參數(shù) paramB 的值
    }
  }
});

注意:此功能正在逐步支持中,可能會(huì)存在不符合預(yù)期的問(wèn)題


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)