微信小程序自定義組件、父子組件相互調(diào)用傳值

1.創(chuàng)建 header 組件

1.1 選中文件夾,右鍵新建 Component。 暫命名為 header

1.2 header.js 文件配置組件屬性與方法

交互關(guān)鍵方法?? this.triggerEvent('subClickEvent', '來自 子組件 的信號這個是 參數(shù)')

Component({

 //組件的屬性列表
  properties: {
    /// 屬性名 簡化寫法
    name: String,
    /// 屬性名
    car: {
      type: String,
      value: ''
    }
  },

// 生命周期函數(shù),可以為函數(shù),或一個在methods段中定義的方法名
  lifetimes: {
    attached: function () { },
    moved: function () { },
    detached: function () { },
  },

// 組件所在頁面的生命周期函數(shù)
  pageLifetimes: {
    show: function () { },
    hide: function () { },
    resize: function () { },
  },


// 組件的初始數(shù)據(jù)
  data: {
    color: '彩色'
  },

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

    logP() {
      console.log('pppppp');
    },

    // 組件內(nèi)部先調(diào)用該方法 再調(diào)用父方法
    cllParentClick() {
      //  觸發(fā) subClickEvent 事件, 間接通知在 父組件中 subClickEvent 綁定的 subClick 方法
      //  建議  subClickEvent 與  subClick 命名相同,這個剛接觸感覺會有一點混亂
      // subClickEvent 就是通知名。subClickEvent 這個通知在使用該組件時綁定的,綁定了父組件的 subClick 方法。然后在這里觸發(fā)了 subClickEvent 通知
      this.triggerEvent('subClickEvent', '來自 子組件 的信號這個是 參數(shù)')
    },

    btnClick(e) {
      console.log('開車開車');
    },
    /// 私有方法 下劃線開頭
    _saySelfName() {
      console.log('header');
    }
  }
})

1.3 header.wxml

header 組件內(nèi)容

<view class="header">
  <text>name:{{name}}  car:{{car}}</text>
  <button size="default" type="primary" bind:tap="btnClick">開車開車</button>
  <button size="default" type="primary" bind:tap="cllParentClick">調(diào)用父組件 subClick 方法</button>
</view>

header.wxss

.header {
  background-color: red;
}

2. 使用 header 組件

2.1 page.json

{
  "usingComponents": {
    "header": "../../../components/header/header"
  }
}

2.2 page.wxml

<header id='comHeader' name='朱小明' car='自行車' bind:subClickEvent='subClick'></header>
<button bind:tap="getHeaderInfo">獲取組件屬性</button>

在這里注冊的 subClickEvent 事件,當(dāng) header 組件觸發(fā) subClickEvent 時,調(diào)用 page 的 subClick 方法。 建議將 subClickEvent 與 subClick 命名相同

2.3 page.js

Page({

// header 組件間接調(diào)用該方法
  subClick(e) {
    console.log(e.detail);
  },
  
  // 主動獲取 header 組件實例對象
  getHeaderInfo() {
    /// 獲取組件實例對象  記得加 # 
    let header = this.selectComponent('#comHeader');
    /// 獲取屬性
    console.log(header.properties.color);
    /// 調(diào)用方法
    header.logP();
  },
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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