微信小程序自定義組件 - 表格組件來啦

背景

針對上期打卡需求開發(fā),這期需要以列表的形式展現(xiàn)打卡記錄偏化,但是微信小程序并沒有表格組件镐侯,可能是官方考慮到,在前端開發(fā)中侦讨,表格一直都是最復(fù)雜的組件之一就沒有實(shí)現(xiàn)吧。沒有現(xiàn)成的組件可以使用骗污,針對這個(gè)問題,目前有兩種解決方案:

  • 1)內(nèi)嵌 h5頁面需忿,(畢竟 h5 的 table組件 眾多)
  • 2)自定義 table組件(造輪子唄)

第一期打卡采用的原生開發(fā)的蜡歹,老板期望第二期需求也能用原生屋厘,方便后期的維護(hù)月而。于是乎,我就開始了造輪子啦??景鼠。需要table組件滿足一下功能:

  • 主要用于展示結(jié)構(gòu)化數(shù)據(jù)痹扇;
  • 支持自定義操作;
  • 支持自定義表頭樣式鲫构;
  • 支持固定表頭,可左右滾動(dòng)等功能包晰。

table組件效果展示

miniprogram-table-component 小程序自定義table組件

使用此組件需要依賴小程序基礎(chǔ)庫 2.2.2 版本,同時(shí)依賴開發(fā)者工具的 npm 構(gòu)建伐憾。具體詳情可查閱官方 npm 文檔赫模。

1.基礎(chǔ)表格

image

2.帶斑馬紋表格

image

3.帶間隔邊框表格

image

4.自定義無數(shù)據(jù)的提示文案

image

5.自定義表格頭樣式

image

6.固定表頭

image

7.表格橫向滑動(dòng)

image

8.自定義表格行和單元格樣式

image

快速上手

一個(gè)簡易的微信小程序 table組件誕生了瀑罗。新鮮熱乎的,前面看完了展現(xiàn)效果斩祭,接下來介紹使用。
自定義的 table 組件摧玫,使用很簡單,就是按照npm包和微信自定義組件的方法使用屋群。

1时迫、安裝和引入

  • 安裝組件:
npm install --save miniprogram-table-component
  • 引入table自定義組件

在頁面的 json 配置文件中添加 recycle-view 和 recycle-item 自定義組件的配置

{
  "usingComponents": {
    "table-view": "../../../miniprogram_npm/miniprogram-table-component"
  }
}

注意:npm包的路徑谓晌。如果這里遇到找不到包的問題,可以查看下方的 微信小程序 npm 找到不到npm包的坑纸肉?

2、使用table組件

在wxml頁面需要用到的地方使用姐刁,如下:

<table 
    headers="{{tableHeader}}" 
    data="{{ row }}" 
    stripe="{{ stripe }}"
    border="{{ border }}"
/>

在js頁面需要用到的地方使用,如下:

Page({
  /**
   * 頁面的初始數(shù)據(jù)
   */
  data: {
    tableHeader: [
      {
        prop: 'datetime',
        width: 150,
        label: '日期',
        color: '#55C355'
      },
      {
        prop: 'sign_in',
        width: 152,
        label: '上班時(shí)間'
      },
      {
        prop: 'sign_out',
        width: 152,
        label: '下班時(shí)間'
      },
      {
        prop: 'work_hour',
        width: 110,
        label: '工時(shí)'
      },
      {
        prop: 'statusText',
        width: 110,
        label: '狀態(tài)'
      }
    ],
    stripe: true,
    border: true,
    outBorder: true,
    row: [
      {
          "id": 1,
          "status": '正常',
          "datetime": "04-01",
          "sign_in_time": '09:30:00',
          "sign_out_time": '18:30:00',
          "work_hour": 8,
      }, {
          "id": 2,
          "status": '遲到',
          "datetime": "04-02",
          "sign_in_time": '10:30:00',
          "sign_out_time": '18:30:00',
          "work_hour": 7,
      }, {
          "id": 29,
          "status": '正常',
          "datetime": "04-03",
          "sign_in_time": '09:30:00',
          "sign_out_time": '18:30:00',
          "work_hour": 8,
      }, {
          "id": 318,
          "status": '休息日',
          "datetime": "04-04",
          "sign_in_time": '',
          "sign_out_time": '',
          "work_hour": '',
      }, {
          "id": 319,
          "status": '正常',
          "datetime": "04-05",
          "sign_in_time": '09:30:00',
          "sign_out_time": '18:30:00',
          "work_hour": 8,
      }
    ],
    msg: '暫無數(shù)據(jù)'
  },

  /** 
   * 點(diǎn)擊表格一行
   */
  onRowClick: function(e) {
    console.log('e: ', e)
  }
})

3聂使、配置

配置部分主要配置這么幾個(gè)屬性谬俄,分別是:

配置項(xiàng) 說明 類型 可選值 默認(rèn)值 必填
headers 表格頭部標(biāo)題、列寬度溃论、列屬性 Array {prop: 'datetime', width: 150, label: '日期'} [] yes
data 表格列表數(shù)據(jù) Array [] no
stripe 是否為斑馬紋 boolean true/false false no
border 是否有間隔線 boolean true/false false no
height 縱向內(nèi)容過多時(shí),可選擇設(shè)置高度固定表頭钥勋。 string auto no
msg 固定無數(shù)據(jù)情況,展示文案 string 暫無數(shù)據(jù)~ no
header-row-class-name 自定義表格頭樣式 string no
row-class-name 自定義表格行樣式 string no
cell-class-name 自定義單元格樣式 string no
bind:rowHandle 行被點(diǎn)擊時(shí)會(huì)觸發(fā)該事件 function no

配置相關(guān)代碼??:

<table  
      header-row-class-name="header-class"
      row-class-name="row-class"
      cell-class-name="cell-class"
      headers="{{tableHeader}}" 
      data="{{ row }}" 
      stripe="{{ stripe }}"
      height="{{ height }}"
      border="{{ border }}"
      bind:rowClick="onRowClick"
      bind:cellClick="onCellClick" 
      no-data-msg="{{ msg }}"
/> 

header-row-class-name扼劈、row-class-name菲驴、cell-class-name 是通過externalClasses支持外部樣式荐吵,在父組件中控制表格的樣式谢翎,externalClasses外部樣式類, 官方說明。例子源碼通過github地址查看森逮。

實(shí)現(xiàn)一個(gè)自定義表格組件遇到的坑

npm 登錄不上和發(fā)布不了的問題?

之前也發(fā)布過 npm 包,遺忘了 npm login 登錄不上需要將淘寶鏡像改回npm的褒侧。還有一點(diǎn)需要注意的是谊迄,每次發(fā)布都需要更新 package.json 文件里的版本號烟央。

微信小程序 npm 找到不到npm包的坑?

組件開發(fā)完疑俭,引入使用的時(shí)候,發(fā)現(xiàn)npm的包钞艇,找不到了?這里比較坑的是小程序的npm有特殊的使用方式哩照。

  • 首先在項(xiàng)目的根目錄初始化 npm:
npm init -f 
  • 然后安裝對應(yīng)的自定義組件包
npm install -production miniprogram-table-component

npm/cnpm/yarn add 均可

  • 在微信開發(fā)者工具中,設(shè)置 —> 項(xiàng)目設(shè)置—> 勾選使用npm模塊飘弧。

  • 在微信開發(fā)者工具中,工具 —> 構(gòu)建npm次伶,構(gòu)建完成會(huì)生成 miniprogram_npm 文件夾,項(xiàng)目用到的npm包都在這里剪个。

  • 按照自己的使用路徑,從 miniprogram_npm 引入需要的包。

table組件源碼

需求開發(fā)時(shí)間比較緊迫乎折,也是盡量提高工作效率,把大塊時(shí)間用來封裝組件了骂澄。愛越折騰啊,也算是適當(dāng)給自己的項(xiàng)目增加點(diǎn)難度坟冲,多一點(diǎn)追求,技術(shù)就會(huì)成長的更快健提。

參考

有哪些表格常用特性功能,該組件沒有完善的私痹,歡迎在下面評論區(qū)留言统刮。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末账千,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匀奏,更是在濱河造成了極大的恐慌,老刑警劉巖娃善,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饲齐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捂人,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門矢沿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滥搭,“玉大人捣鲸,你說我怎么就攤上這事≡曰蹋” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵外厂,是天一觀的道長。 經(jīng)常有香客問我汁蝶,道長,這世上最難降的妖魔是什么掖棉? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮幔亥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘紫谷。我一直安慰自己捐寥,他們只是感情好祖驱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捺僻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匕坯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天锹雏,我揣著相機(jī)與錄音,去河邊找鬼术奖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛采记,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唧龄,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讽挟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戏挡,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晨仑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后洪己,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡答捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年屑那,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艘款。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哗咆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出益眉,到底是詐尸還是另有隱情晌柬,我是刑警寧澤郭脂,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站展鸡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莹弊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一拴竹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栓拜,春花似錦、人聲如沸惠昔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诫给,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間中狂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工胃榕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勋又。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像楔壤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子挺邀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

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