小程序組件里的數(shù)據(jù)傳遞

先上一段官方文檔

  • 組件實(shí)例剛剛被創(chuàng)建好時(shí), created 生命周期被觸發(fā)。此時(shí),組件數(shù)據(jù) this.data 就是在 Component 構(gòu)造器中定義的數(shù)據(jù) data 。 此時(shí)還不能調(diào)用 setData 通常情況下,這個(gè)生命周期只應(yīng)該用于給組件 this 添加一些自定義屬性字段。
  • 在組件完全初始化完畢、進(jìn)入頁(yè)面節(jié)點(diǎn)樹后, attached 生命周期被觸發(fā)。此時(shí), this.data 已被初始化為組件的當(dāng)前值。這個(gè)生命周期很有用,絕大多數(shù)初始化工作可以在這個(gè)時(shí)機(jī)進(jìn)行。
  • 在組件離開頁(yè)面節(jié)點(diǎn)樹后, detached 生命周期被觸發(fā)。退出一個(gè)頁(yè)面時(shí),如果組件還在頁(yè)面節(jié)點(diǎn)樹中,則 detached 會(huì)被觸發(fā)。

文檔說(shuō)絕大多數(shù)初始化工作都在 attached 生命周期進(jìn)行,但是小程序組件數(shù)據(jù)分為組件的內(nèi)部數(shù)據(jù) data: {}和從頁(yè)面?zhèn)鬟f過(guò)來(lái)的 properties: {}。但是有個(gè)問題是在組件的 attached 中無(wú)法拿到使用組件的頁(yè)面中setData的值。

  // 頁(yè)面的js
  data: {
    myString: '這是頁(yè)面初始的數(shù)據(jù)'
  },
  onLoad: function (options) {
    this.setData({
      mySrting: '這是頁(yè)面setData后的數(shù)據(jù)',
    })
 }

給組件傳遞myString

  // 頁(yè)面的wxml
  <c2b-customImg myString="{{myString}}"></c2b-customImg>

組件接受myString

  properties: {
    myString: {
      type: String,
      value: '組件里mySrting的默認(rèn)值'
    }
  },

  /**
   * 組件的初始數(shù)據(jù)
   */
  data: {

  },

  /**
   * 組件的方法列表
   */
  methods: {

  },

  lifetimes: {
    created: function(){
      console.log(this.properties.myString, 'created')
    },
  // "組件里mySrting的默認(rèn)值" "created"
    attached: function() {
      // 在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹時(shí)執(zhí)行
      console.log(this.properties.myString, 'attached')
    },
  // "這是頁(yè)面初始的數(shù)據(jù)" "attached"
    ready: function(){
      console.log(this.properties.myString, 'ready')
    },
  //  "這是頁(yè)面setData后的數(shù)據(jù)" "ready"
    detached: function() {
      // 在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹移除時(shí)執(zhí)行
    },
  },

所以可以看出在組件里 mySrtingcreated 取的是組件的默認(rèn)值, attached取的是頁(yè)面里 data 的初始數(shù)據(jù),ready 取的才是頁(yè)面 setData 之后的值。具體原理應(yīng)該要研究下組件的生命周期函數(shù)的源碼了,可能是在組件 attached 之后頁(yè)面才 onLoad。反正直接在組件里使用 mySrting 就不會(huì)有這些問題,但如果想用頁(yè)面 setData 后的 myString 來(lái)對(duì)組件的數(shù)據(jù)初始化,就只能放在組件的 ready 里而不能放在 attached 里、

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容