微信小程序 自定義組件實戰(zhàn)的三個實例(1)

現(xiàn)在前端的組件 大行其道填大,大家都認為組件可以更適合大型項目脊凰,更加的便捷,所以我們需要掌握一下箭券。

實戰(zhàn)一

先做一個簡單的净捅,常用的彈框,最終效果:


step 1 創(chuàng)建components

根目錄下創(chuàng)建一個components文件夾辩块。然后在里邊建一個子目錄蛔六,如exchange,此時右鍵新建一個component即可產(chǎn)生需要的子文件

例一

把一個以前本來在多個頁面會應用到的彈框整合到外邊。

step1

根目錄下創(chuàng)建一個components文件夾废亭。然后在里邊建一個子目錄国章,如convert

step2

wxml

<!--components/exchange/exchange.wxml-->
<view class="wx-popup" hidden="{{flag}}">
  <view class='popup-container'>
    <view class="wx-popup-title">{{title}}</view>
    <view class="wx-popup-con">{{content}}</view>
    <view class="wx-popup-btn">
      <text class="btn-no" bindtap='_error'>{{btn_no}}</text>
      <text class="btn-ok" bindtap='_success'>{{btn_ok}}</text>
    </view>
  </view>
</view>

接下來寫wxss,說明一下,咱們調(diào)樣式一般是先在其他頁面寫好某一塊豆村,此時樣式啊捉腥,結(jié)構(gòu)啊,js啊你画,都已經(jīng)實現(xiàn)了抵碟,然后再整合到組件里,并不是你想寫一個這樣的組件上來就在這個組件這一部分寫的坏匪,當然拟逮,如果你能找到一個頁面來輔助顯示你當前寫的這個組件的邏輯和樣式那就無所謂啦,程序并沒有一定之規(guī)适滓,條條大路通羅馬敦迄。

<!--components/exchange/exchange.wxml-->
<view class="wx-popup" hidden="{{flag}}">
  <view class='popup-container'>
    <view class="wx-popup-title">{{title}}</view>
    <view class="wx-popup-con">{{content}}</view>
    <view class="wx-popup-btn">
      <text class="btn-no" bindtap='_error'>{{btn_no}}</text>
      <text class="btn-ok" bindtap='_success'>{{btn_ok}}</text>
    </view>
  </view>
</view>

json文件這里是跟普通頁面的json是不一樣的:

{
  "component": true,
  "usingComponents": {}
}

接下來就是最重要的邏輯部分的代碼了

// components/exchange/exchange.js
Component({
  options: {
    multipleSlots: true // 在組件定義時的選項中啟用多slot支持
  },
  /**
   * 組件的屬性列表
   */
  properties: {
    title: {            // 屬性名
      type: String,     // 類型(必填),目前接受的類型包括:String, Number, Boolean, Object, Array, null(表示任意類型)
      value: '標題'     // 屬性初始值(可選)凭迹,如果未指定則會根據(jù)類型選擇一個
    },
    // 彈窗內(nèi)容
    content: {
      type: String,
      value: '內(nèi)容'
    },
    // 彈窗取消按鈕文字
    btn_no: {
      type: String,
      value: '取消'
    },
    // 彈窗確認按鈕文字
    btn_ok: {
      type: String,
      value: '確定'
    }
  },

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

  /**
   * 組件的方法列表
   */
  methods: {
    //隱藏彈框
    hidePopup: function () {
      this.setData({
        flag: !this.data.flag
      })
    },
    //展示彈框
    showPopup() {
      this.setData({
        flag: !this.data.flag
      })
    },
    /*
    * 內(nèi)部私有方法建議以下劃線開頭
    * triggerEvent 用于觸發(fā)事件
    */
    _error() {
      //觸發(fā)取消回調(diào)
      this.triggerEvent("error")
    },
    _success() {
      //觸發(fā)成功回調(diào)
      this.triggerEvent("success");
    }
  }
})


step 3 在其他頁面應用

建一個新的頁面test罚屋,在該頁面使用這個組件
wxml

<!--pages/test/test.wxml-->
<view class="container" style='margin-top:200rpx;'>
  <view class="userinfo">
    <button bindtap="showPopup"> 點我 </button>
  </view>
  <popup id='popup' 
      title='小組件' 
      content='學會了嗎' 
      btn_no='沒有' 
      btn_ok='學會了'
      bind:error="_error"  
      bind:success="_success">
  </popup>
</view>

json文件

{
  "usingComponents": {
    "popup": "/components/exchange/exchange"
  }
}

js

const app = getApp()

Page({
  onReady: function () {
    //獲得popup組件
    this.popup = this.selectComponent("#popup");
  },

  showPopup() {
    this.popup.showPopup();
  },

  //取消事件
  _error() {
    console.log('你點擊了取消');
    this.popup.hidePopup();
  },
  //確認事件
  _success() {
    console.log('你點擊了確定');
    this.popup.hidePopup();
  }
})

就能實現(xiàn)效果了。

案例遇到的幾個問題:

關于樣式:

只使用類名選擇器嗅绸,不要使用其他脾猛,包括后代選擇器,而且app.wxss里的樣式以及組件所在頁面的樣式對組件的樣式?jīng)]有影響/不起作用

兩個開發(fā)者工具警告的意思:
頁面沒有處理函數(shù)

這是頁面沒有相應的事件處理函數(shù)鱼鸠。

組件沒有處理函數(shù)

這是組件的methods里邊沒有相應的事件處理函數(shù)

不喜歡過長 的文章猛拴,所以決定第二個實戰(zhàn)和第三個實戰(zhàn)項目寫在下一篇羹铅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愉昆,隨后出現(xiàn)的幾起案子职员,更是在濱河造成了極大的恐慌,老刑警劉巖跛溉,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焊切,死亡現(xiàn)場離奇詭異,居然都是意外死亡芳室,警方通過查閱死者的電腦和手機蛛蒙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渤愁,“玉大人牵祟,你說我怎么就攤上這事《陡瘢” “怎么了诺苹?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雹拄。 經(jīng)常有香客問我收奔,道長,這世上最難降的妖魔是什么滓玖? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任坪哄,我火速辦了婚禮,結(jié)果婚禮上势篡,老公的妹妹穿的比我還像新娘翩肌。我一直安慰自己,他們只是感情好禁悠,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布念祭。 她就那樣靜靜地躺著,像睡著了一般碍侦。 火紅的嫁衣襯著肌膚如雪粱坤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天瓷产,我揣著相機與錄音站玄,去河邊找鬼。 笑死濒旦,一個胖子當著我的面吹牛株旷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疤估,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灾常,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铃拇?” 一聲冷哼從身側(cè)響起钞瀑,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慷荔,沒想到半個月后雕什,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡显晶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年贷岸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磷雇。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡偿警,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唯笙,到底是詐尸還是另有隱情螟蒸,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布崩掘,位于F島的核電站七嫌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苞慢。R本人自食惡果不足惜诵原,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挽放。 院中可真熱鬧绍赛,春花似錦、人聲如沸辑畦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航闺。三九已至褪测,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潦刃,已是汗流浹背侮措。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乖杠,地道東北人分扎。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像胧洒,于是被迫代替她去往敵國和親畏吓。 傳聞我的和親對象是個殘疾皇子墨状,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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