微信小程序 - 17-3.自定義組件完整代碼

之前寫了各種邏輯中的部分代碼 , 這里貼出來每個頁面的完整代碼


image.png

自定義組件Tabs

Tabs.wxml

<view class="tabs">
    <view class="tab_title">
        <view wx:for="{{tabs}}" wx:key="{{tabs.id}}" class="title_item {{item.isActive?'active':''}}" bindtap="handleItemTap" data-index="{{index}}">
            {{item.name}}
        </view>
    </view>
    <view class="tabs_content">
        <!-- 
            slot標(biāo)簽 其實就是一個占位符 插槽
            等到父組件調(diào)用子組件的時候再傳遞標(biāo)簽過來,最終這些被傳遞的標(biāo)簽就會替換slot插槽的位置
         -->
        <slot ></slot>
    </view>
</view>

Tabs.js

// commponents/Tabs/Tabs.js
Component({
  /**
   * 里邊存放的是要從父組件中接收的數(shù)據(jù)
   * 組件的屬性列表
   */
  properties: {
    // //要接受的數(shù)據(jù)的名稱
    // aaa:{
    //   //type 要接收的數(shù)據(jù)的類型
    //   type:String,
    //   //value 默認值
    //   value:""
    // }
    tabs: {
      type: Array,
      value: []
    }
  },

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

  },

  /**
   * 1. 頁面.js文件中,存放事件回調(diào)函數(shù)的時候,存放在data同層級下
   * 2. 組件.js文件中,存放事件回調(diào)函數(shù)的時候,必須存放在methods中
   * 組件的方法列表
   */
  methods: {
    //綁定點擊事件,需要再methods中綁定
    handleItemTap(e) {
      /**
       1. 綁定點擊事件,需要再methods中綁定
       2. 獲取被點擊的索引
       3. 獲取原數(shù)組
       4. 對數(shù)組循環(huán)
          1. 給每一個循環(huán)性,選中屬性改為false
          2. 給當(dāng)前的索引項選中屬性給true

       5. 點擊事件觸發(fā)的時候
          觸發(fā)父組件中的自定義事件,同時傳遞數(shù)據(jù)給父控件
          this.triggerEvent("父組件自定義事件的名稱",要傳遞的參數(shù))
       */
      console.log("點擊咯!");
      console.log(e);
      //2. 獲取被點擊的索引
      const { index } = e.currentTarget.dataset;//{index} 是es6中的解構(gòu)賦值
      //3. 獲取data中的數(shù)組
      //解構(gòu) 對復(fù)雜類型進行解構(gòu)的時候,復(fù)制了一份變量的引用而已
      //最嚴謹?shù)淖龇?重新拷貝一份數(shù)組,再對這個數(shù)組的北方進行處理 : let tabs = JSON.parse(JSON.stringify(this.data.tabs));
      //不要直接修改this.data.數(shù)據(jù)
      // let { tabs } = this.data;//相當(dāng)于 let tabs = this.data.tabs;
      //4. 對數(shù)組循環(huán)(給每一個循環(huán)性,選中屬性改為false;給當(dāng)前的索引項選中屬性給true)
      //[].forEach遍歷數(shù)組 遍歷數(shù)組的時候修改了v 也會導(dǎo)致原數(shù)組被修改
      // tabs.forEach((v, i) => i === index ? v.isActive = true : v.isActive = false);
      // this.setData({
        // tabs
      // })
      //5. 觸發(fā)父組件中的自定義事件
      this.triggerEvent("itemChange",{index});
    }
  }
})

Tabs.wxss

/*  */
.tabs{

}
.tab_title{
    display: flex;
    padding: 10rpx 0;
}
.title_item{
    flex: 1;
    display: flex;
    justify-content: center;
    padding: 10rpx;
    align-items: center;

}
.active{
    color: red;
    border-bottom: 5rpx solid currentColor;
}
.tabs_content{

}

引用文件demo5

demo5.wxml

<!-- 
    1. 父組件(頁面)向子組件傳遞數(shù)據(jù),通過標(biāo)簽屬性的方式來傳遞
        1. 在子組件上進行接收
        2. 把這個數(shù)據(jù)當(dāng)成是data中的數(shù)據(jù)直接用即可
    2. 子向父傳遞數(shù)據(jù),通過事件的方式傳遞
        1. 在子組件的標(biāo)簽上加入一個自定義事件
 -->
<Tabs tabs="{{tabs}}" binditemChange="handleItemChange"> 
    <block wx:if="{{tabs[0].isActive}}">0</block>
    <block wx:elif="{{tabs[1].isActive}}">1</block> 
    <block wx:elif="{{tabs[2].isActive}}">2</block> 
    <block wx:else>3</block>
</Tabs>

demo5.js

// pages/demo5/demo5.js
Page({

  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    tabs: [
      {
        id: 0,
        name: '首頁',
        isActive: true
      },
      {
        id: 1,
        name: '原創(chuàng)',
        isActive: false
      },
      {
        id: 2,
        name: '分類',
        isActive: false
      },
      {
        id: 3,
        name: '關(guān)于',
        isActive: false
      }
    ]
  },

  //自定義事件,用來接收子組件傳遞的數(shù)據(jù)的
  handleItemChange(e) {
    console.log(e);
    //接收傳遞過來的參數(shù)
    const index = e.detail.index;
    let {tabs} = this.data;
    tabs.forEach((v, i) => i === index ? v.isActive = true : v.isActive = false);
    this.setData({
      tabs
    })
  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面加載
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面顯示
   */
  onShow: function () {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面隱藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面卸載
   */
  onUnload: function () {

  },

  /**
   * 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 頁面上拉觸底事件的處理函數(shù)
   */
  onReachBottom: function () {

  },

  /**
   * 用戶點擊右上角分享
   */
  onShareAppMessage: function () {

  }
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拂檩,一起剝皮案震驚了整個濱河市货徙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暖途,老刑警劉巖宦赠,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮寂,死亡現(xiàn)場離奇詭異轧苫,居然都是意外死亡捆交,警方通過查閱死者的電腦和手機焕蹄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門逾雄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腻脏,你說我怎么就攤上這事鸦泳。” “怎么了永品?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵做鹰,是天一觀的道長。 經(jīng)常有香客問我鼎姐,道長钾麸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任炕桨,我火速辦了婚禮饭尝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘献宫。我一直安慰自己钥平,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布姊途。 她就那樣靜靜地躺著涉瘾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捷兰。 梳的紋絲不亂的頭發(fā)上立叛,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音贡茅,去河邊找鬼囚巴。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彤叉。 我是一名探鬼主播庶柿,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秽浇!你這毒婦竟也來了浮庐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柬焕,失蹤者是張志新(化名)和其女友劉穎审残,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑举,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡搅轿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了富玷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片璧坟。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赎懦,靈堂內(nèi)的尸體忽然破棺而出雀鹃,到底是詐尸還是另有隱情,我是刑警寧澤励两,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布黎茎,位于F島的核電站,受9級特大地震影響当悔,放射性物質(zhì)發(fā)生泄漏傅瞻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一盲憎、第九天 我趴在偏房一處隱蔽的房頂上張望俭正。 院中可真熱鬧,春花似錦焙畔、人聲如沸掸读。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儿惫。三九已至,卻和暖如春伸但,著一層夾襖步出監(jiān)牢的瞬間肾请,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工更胖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铛铁,地道東北人隔显。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像饵逐,于是被迫代替她去往敵國和親括眠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.小程序起步 (1)點擊https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon閱讀 3,354評論 0 0
  • 因新工作主要負責(zé)微信小程序這一塊,最近的重心就移到這一塊薄声,該博客是對微信小程序整體的整理歸納以及標(biāo)明一些細節(jié)點当船,初...
    majun00閱讀 7,341評論 0 9
  • 好吧,突然發(fā)現(xiàn)學(xué)不完了默辨,一下子德频,那就分開吧,由于時間太久缩幸,直接重新大致復(fù)習(xí)了一下 微信小程序自定義組件微信小程序支...
    小小小8021閱讀 2,604評論 0 9
  • 2017.11月初期待已久的原生小程序自定義組件功能已經(jīng)發(fā)布壹置,此次發(fā)布版本為 1.6.3,盡管此前有模板<temp...
    dkvirus閱讀 4,836評論 0 6
  • 昔日桌粉,啟童蒙樹桃李,師恩深重衙四; 今晨铃肯,辭凡塵登極樂,大地同悲传蹈。 老師去世已兩日了押逼,那天...
    水云主閱讀 582評論 2 16