0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用JS UI框架的List組件畫一個表格?

HarmonyOS開發(fā)者 ? 來源:HarmonyOS開發(fā)者 ? 作者:九弓子 ? 2021-07-01 10:42 ? 次閱讀

本文作者:九弓子

前端最討厭的事:需要閱讀同事封裝的各種奇怪組件

前端最喜歡的事:分分鐘封裝一個自定義組件

對于以上描述,你是否也有同感?本期我們?yōu)榇蠹規(guī)淼氖情_發(fā)者“九弓子”投稿的“如何用JS UI框架的List組件畫一個表格”。

作者通過List組件快速、高效地構(gòu)建了一個自定義表格。接下來,讓我們一起見證作者是如何遇到問題,解決問題,最終實現(xiàn)開發(fā)目標的。希望能給你的HarmonyOS開發(fā)之旅帶來一些啟發(fā)~

在敲代碼之前,需要大家下載安裝“Huawei DevEco Studio”,安裝指南如下:● Huawei DevEco Studio安裝指南:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415

1

前端總會遇到一種需求 -- 自己畫

不是因為大家想寫組件,而是因為隨著各種千奇百怪網(wǎng)頁需求的出現(xiàn),即便是繁榮如Web的生態(tài),框架也不夠用。更不用說咱們剛剛出生沒多久的HarmonyOS手機應(yīng)用開發(fā)。表格是頁面中最常用的組件之一,那么如何在JS UI為主的HarmonyOS應(yīng)用中書寫一個表格呢。既然沒有三方框架加持,我們就先拋離css美化的問題,用List組件做一個極簡表格:

2

制作頁面之前,先確定幾件事

在開發(fā)HarmonyOS 的JS UI頁面之前,先要確定這么幾件事。

1) 是否有我們可以利用的組件?

HarmonyOS的JS開發(fā)不是Web開發(fā),雖然二者寫法很像,但不是一回事。

2) 不要嘗試去找官方文檔沒有寫的html標簽

官方提供的標簽本身就是組件的另一種體現(xiàn)。

3) 頁面本身沒有Scroll滾動。

如果你書寫的頁面超出屏幕,且外層沒有List組件,是無法滑動屏幕的。

基于以上問題,我們通常會先寫了一個容器(效果如圖1所示),在外層寫一個list標簽負責Y軸縱向的滾動。再寫一個id為table的div,并且給它一個邊框,之后的表格將在這個div內(nèi)繪制。

《!--hml--》《div class=“container”》 《!--外層的這個list組件負責Y軸縱向滾動--》 《list》 《list-item》 《!--寫了一個id為table的div--》 《div id=“table”》《/div》 《/list-item》 《/list》《/div》

/*css*/.container { padding: 10px;}#table { width: 100%; height: 500px; border: 1px solid #000;/*給table設(shè)置了邊框*/}

這時就能在圖1中看到一個方塊:

3

制作過程

1)確定思路因為手機寬度有限,表格過大的話,就需要橫向滾動。所以,我們后面還需要繼續(xù)在內(nèi)層寫入一個 list 組件用來負責X軸橫向的滾動。

2)確定數(shù)據(jù)結(jié)構(gòu)

表格數(shù)據(jù)結(jié)構(gòu),是可視化的二維數(shù)組,如下所示:

//jsexport default { data: { //table_data就是我們要制作的表格數(shù)據(jù) table_data:[ [“日期/時間”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”], [“表頭1”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭2”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭3”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭4”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭5”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭6”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭7”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”] ] }}

為了開啟橫向滾動屬性,hml代碼中新增了id為table-row的list組件,并且寫入了一個style。新增了一個for語句,通過for語句循環(huán)獲取tabledata里的每個數(shù)組,還新增了span item,用于數(shù)據(jù)綁定。運行效果如圖2所示:

《!--hml--》《div class=“container”》 《list》 《list-item》 《div id=“table”》 《!--新增了一個id為table-row的list組件,并寫入了一個Style--》 《list id=“table-row” style=“flex-direction: row;”》 《!--通過for語句循環(huán)獲取table data里的每個數(shù)組--》 《list-item for=“(index,item) in table_data”》 《div》 《text》 《!--數(shù)據(jù)綁定,注意此處綁定的是item,后文會改成綁定item中的value--》 《span》{{ item }}《/span》 《/text》 《/div》 《/list-item》 《/list》 《/div》 《/list-item》 《/list》《/div》

通過發(fā)現(xiàn),頁面的數(shù)組全擠在了一起,為了解決這個問題,接下來我們需要把最內(nèi)層的文本輸出賦予更多css樣式。

4)表格樣式設(shè)計

首先,給予X軸橫向list內(nèi)部每一個list-item一個寬度,讓它們撐開超出屏幕寬度,自然就可以順利滾動。然后,給予內(nèi)部文本的div一個邊框,讓它們看起來更像一個表格,運行后效果如圖3所示:

《!--hml--》《div class=“container”》 《list》 《list-item》 《div id=“table”》 《list id=“table-row” style=“flex-direction: row;”》 《!--給list內(nèi)部每個list-item設(shè)定一個寬度30%,讓它們撐開超出屏幕寬度--》 《list-item for=“(index,item) in table_data” style=“width: 30%;”》 《!--給內(nèi)部文本的div一個邊框,讓它看起來像個表格--》 《div style=“border: 1px solid #000;width: 100%;”》 《!--文本排列:居中--》 《text style=“text-align: center;”》 《span》{{ item }}《/span》 《/text》 《/div》 《/list-item》 《/list》 《/div》 《/list-item》 《/list》《/div》

通過發(fā)現(xiàn),橫向滾動已實現(xiàn),但這個表格是按照一維數(shù)組輸出的,只輸出了每個item。接下來新增一個for語句,使數(shù)據(jù)的輸出為item里面的value值。我們再給內(nèi)層的div加一個flex彈性換行 ,最后我們再寫一個Css樣式最常用的Flex彈性布局,讓文本的輸出真正按照二維數(shù)組來輸出。運行效果圖如圖4所示:

《!--hml--》《div class=“container”》 《list》 《list-item》 《div id=“table”》 《list id=“table-row” style=“flex-direction: row;”》 《list-item for=“(index,item) in table_data” style=“width: 30%;”》 《div class=“row”》 《!--新增了一個for語句,使數(shù)據(jù)的輸出為item里面的value值--》 《div for=“value in item” class=“col”》 《text》 《!--這里的數(shù)據(jù)綁定是value值,前文代碼中一直都是item--》 《span》{{ value }}《/span》 《/text》 《/div》 《/div》 《/list-item》 《/list》 《/div》 《/list-item》 《/list》《/div》

/*css*/.container { padding: 10px;}#table { width: 100%; height: 500px; border: 1px solid #000;}//設(shè)定彈性布局.row { display: flex ; flex-direction:row; flex-wrap:wrap;}.col { width: 100%; height: 60px; border: 1px solid #000;}

我們目標中的表,但如果數(shù)據(jù)增多,Y軸無法就滾動查看。這是因為我們的id=table 的div組件,鎖死了高度500px。并且最外層負責Y軸滾動的list組件并沒有一個固定高度,且小于內(nèi)部元素。

我們給予表格容器 id=table 一個自適應(yīng)的高度,因為現(xiàn)在的hml中的div不支持高度自動(height:auto)。那么我們需要在//js中先計算需要的高度,然后將值綁定在hml中。

最后的代碼:

//jsexport default { data: { table_data:[ [“日期/時間”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”,“2020-12-16”], [“表頭1”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭2”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭3”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭4”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭5”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭6”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”], [“表頭7”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”,“10.10”,“15.36”,“58.00”,“66.41”,“20.21”,“22.00”] ], table_height:‘’

}, onInit() { let rowNum = this.table_data[0].length let height = rowNum*60 //我們在css中設(shè)計了行高為60像素,在這里計算出高度 this.table_height = height + ‘px’ }}

《!--hml--》《div class=“container”》 《list scrollbar=“on” style=“height: 500px;”》 《list-item》 《!--JS 計算出的高度數(shù)據(jù)綁定在此--》 《div id=“table” style=“height: {{table_height}};”》 《list id=“table-row” style=“flex-direction: row;”》 《list-item for=“(index,item) in table_data” style=“width: 30%;”》 《div class=“row”》 《div for=“value in item” class=“col”》 《text style=“width: 100%;text-align: center;”》 《span》{{ value }}《/span》 《/text》 《/div》 《/div》 《/list-item》 《/list》 《/div》 《/list-item》 《/list》《/div》

/*css*/.container { padding: 10px;}#table { width: 100%; height: 500px;/* border: 1px solid #000;*/}.row { display: flex ; flex-direction:row; flex-wrap:wrap;}.col { width: 100%; height: 60px; border: 1px solid #000;}

滑動條出現(xiàn),就解決了數(shù)據(jù)增多,Y軸無法滑動查看的問題。至此,我們就完成本次的開發(fā)目標,用list組件創(chuàng)建一個自定義表格,只需幾行代碼就可以解決,非常便捷和高效。

以上就是本期作者分享的如何用List組件自定義的一個表格,大家可以根據(jù)自己的需求,用List組件自定義你想要的表格。學無止境,希望本期分享的內(nèi)容能給你帶來新的啟發(fā)。同時也歡迎更多開發(fā)者與我們分享開發(fā)成果、技術(shù)解讀與經(jīng)驗心得,說不定下一期的主角就是你哦!

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6820

    瀏覽量

    88747
  • JS
    JS
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    18056
  • ui
    ui
    +關(guān)注

    關(guān)注

    0

    文章

    203

    瀏覽量

    21330
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29962

原文標題:如何用JS UI框架中的List組件畫一個表格?

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    何為Teable多維表格數(shù)據(jù)庫,它僅僅是在線的智能表格嗎?

    表格種創(chuàng)新的數(shù)據(jù)管理和協(xié)作工具,它結(jié)合了傳統(tǒng)電子表格的直觀界面與關(guān)系數(shù)據(jù)庫的強大功能。用戶不僅可以像在Excel中樣在二維表格內(nèi)記錄
    的頭像 發(fā)表于 10-14 16:13 ?279次閱讀

    推薦支持js的嵌入式設(shè)備開發(fā)平臺

    控制gpio,pwm,藍牙,nfc,二維碼識別,人臉識別,網(wǎng)絡(luò),mqtt,tcp,看門狗,ui等等,支持多線程 也支持多種設(shè)備。 以下是代碼示例和效果圖示例 import log from
    發(fā)表于 09-04 14:04

    鴻蒙ArkTS容器組件:ListItemGroup

    組件用來展示列表item分組,寬度默認充滿[List]組件,必須配合List組件來使用。
    的頭像 發(fā)表于 07-10 09:20 ?527次閱讀
    鴻蒙ArkTS容器<b class='flag-5'>組件</b>:ListItemGroup

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件UI的數(shù)據(jù)同步】

    基于當前的應(yīng)用模型,可以通過以下幾種方式來實現(xiàn)UIAbility組件UI之間的數(shù)據(jù)同步。
    的頭像 發(fā)表于 06-03 10:26 ?411次閱讀
    鴻蒙Ability Kit(程序<b class='flag-5'>框架</b>服務(wù))【UIAbility<b class='flag-5'>組件</b>與<b class='flag-5'>UI</b>的數(shù)據(jù)同步】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件概述】

    UIAbility組件種包含UI的應(yīng)用組件,主要用于和用戶交互。
    的頭像 發(fā)表于 05-30 20:17 ?384次閱讀
    鴻蒙Ability Kit(程序<b class='flag-5'>框架</b>服務(wù))【UIAbility<b class='flag-5'>組件</b>概述】

    HarmonyOS開發(fā)案例:【使用List組件實現(xiàn)設(shè)置項】

    使用List組件、Toggle組件以及Router接口,實現(xiàn)簡單的設(shè)置頁,點擊將跳轉(zhuǎn)到對應(yīng)的詳細設(shè)置頁面。
    的頭像 發(fā)表于 05-10 17:01 ?851次閱讀
    HarmonyOS開發(fā)案例:【使用<b class='flag-5'>List</b><b class='flag-5'>組件</b>實現(xiàn)設(shè)置項】

    HarmonyOS開發(fā)案例:【基礎(chǔ)組件Slider的使用】

    學習如何使用聲明式UI編程框架的基礎(chǔ)組件。本篇Codelab將會使用Image組件、Slider組件、Text
    的頭像 發(fā)表于 05-10 16:01 ?632次閱讀
    HarmonyOS開發(fā)案例:【基礎(chǔ)<b class='flag-5'>組件</b>Slider的使用】

    OpenHarmony實戰(zhàn)開發(fā)-list開發(fā)指導

    list是用來顯示列表的組件,包含系列相同寬度的列表項,適合連續(xù)、多行地呈現(xiàn)同類數(shù)據(jù)。 創(chuàng)建list組件 在pages/index目錄下的
    發(fā)表于 04-29 14:44

    OpenHarmony開發(fā)實例:【 待辦事項TodoList】

    TodoList應(yīng)用是基于OpenHarmony SDK開發(fā)的安裝在潤和HiSpark Taurus AI Camera(Hi3516d)開發(fā)板標準系統(tǒng)上的應(yīng)用;應(yīng)用主要功能是以列表的形式,展示需要完成的日程;通過本demo可以學習到 JS UI
    的頭像 發(fā)表于 04-22 22:00 ?652次閱讀
    OpenHarmony開發(fā)實例:【 待辦事項TodoList】

    鴻蒙OS開發(fā)實戰(zhàn):【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統(tǒng)的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發(fā)者針對應(yīng)用接口進行單元測試,并且可基于UI操作進行
    的頭像 發(fā)表于 04-08 14:49 ?1244次閱讀
    鴻蒙OS開發(fā)實戰(zhàn):【自動化測試<b class='flag-5'>框架</b>】使用指南

    微軟發(fā)布Agent框架UFO,引領(lǐng)UI交互新紀元

    微軟近日宣布推出全新的Agent框架——UFO(UI-Focused Agent),旨在構(gòu)建更智能、更直觀的用戶界面交互體驗。該框架基于OpenAI的GPT-4V圖像識別模型開發(fā),專為Windows操作系統(tǒng)上的應(yīng)用程序設(shè)計,能夠
    的頭像 發(fā)表于 02-19 11:15 ?1099次閱讀

    鴻蒙開發(fā)實戰(zhàn)-(ArkUI)List組件和Grid組件的使用

    的每一個列表項對應(yīng)ListItem組件。 使用ForEach渲染列表 列表往往由多個列表項組成,所以我們需要在List
    發(fā)表于 01-18 20:18

    鴻蒙ArkTS的起源和簡介

    成為ECMA標準的新特性。 4、ArkTS 如上所述,基于JS的前端框架以及TS的引入,進步提升了應(yīng)用開發(fā)效率,但依然存在些不足。 從開發(fā)者維度來看: 寫
    發(fā)表于 01-16 16:23

    何用BUCK電路簡單實現(xiàn)可靠的負電源?

    何用BUCK電路簡單實現(xiàn)可靠的負電源?
    的頭像 發(fā)表于 12-05 15:12 ?754次閱讀
    如<b class='flag-5'>何用</b>BUCK電路簡單實現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個</b>可靠的負電源?

    python輸出list的每一個元素

    Python是種簡單易學的編程語言,廣泛應(yīng)用于各個領(lǐng)域中。而處理列表(list)是Python中非常常見的操作之。在Python中,列表是用來存儲多個值的種數(shù)據(jù)結(jié)構(gòu)。 Pytho
    的頭像 發(fā)表于 11-21 16:16 ?1434次閱讀