成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS自定義組件之分頁功能組件封裝實例

開發 OpenHarmony
組件是對數據和方法的簡單封裝。個人對組件的通俗理解是:對單獨的某個通用功能點或UI顯示模塊的封裝。

[[435938]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

一、分頁組件效果展示

【拓維云創】HarmonyOS 自定義組件之分頁功能組件封裝實例-鴻蒙HarmonyOS技術社區

二、分頁組件設計流程

【拓維云創】HarmonyOS 自定義組件之分頁功能組件封裝實例-鴻蒙HarmonyOS技術社區

三、自定義組件封裝必備知識點

1,何謂自定義組件

組件是對數據和方法的簡單封裝。個人對組件的通俗理解是:對單獨的某個通用功能點或UI顯示模塊的封裝。

2,組件框架搭建步驟

此處以js為例:

第一步:在工程目錄的common下新建一個包名;

第二步:在新建的包名目錄下新建新的空文件(js\hml\css),每個文件具體做啥就不一一介紹了,三個文件的名字一定要一樣,這個名字就是外部調用的名字了,非常重要。

第三步:js文件寫好簡單結構,頁面數據,hml中寫個div,div中加個text或button就可以了

第四步:將自己新建的組件在可展示的頁面中調用并展示。

到這里自定義組件框架已搭建完畢,是不是還比較簡單。后面就可以開始完善自己組件的功能了。

3,組件怎么調用

組件引入:

  1. <element name='**pagingcomp**' src='../../common/component/**pagingcomp.hml**'></element> 
  2. 1. 
  3. 1. 
  4. 1. 

注意:必須在需要引用的頁面最上面調用,路徑和name一定要寫對,這里的name就是組件的文件的名字。

頁面元素裝載:

  1. <**pagingcomp** class="threecomp"></**pagingcomp**> 

 注意:用法跟text、button一樣,只是標簽名字變成了組件名字。

4,組件怎么定義入參

組件的入參需用props定義:

  1. /* 組件可接收的參數setTotalnum,setPageount 
  2.     使用時 setTotalnum 寫成 set-totalnum 
  3.     setPageount 寫成 set-pageount 
  4.     */ 
  5.     props: ['setTotalnum','setPageount'], 

 注意:組件內部props定義的參數和data定義的參數用法一樣,可以直接this.setTotalnum.

5,外部怎么傳入參數

參數傳入實例:

  1. <pagingcomp class="threecomp" set-totalnum='121' set-pageount='10'></pagingcomp> 

注意:set-totalnum,set-pageount為入參,寫法一定要將駝峰法的變量拆開并全小寫

6,組件怎么提供回調事件并綁定參數

分發回調事件(js代碼):

  1. this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 

 注意:yourFun是組件提供的回調方法名,{startnum: this.startnum,endnum: this.endnum}是參數,this.$emit()調用一次,就會立馬相應一次關聯的回調方法

7,外部如何綁定回調事件并獲取參數

  1. <pagingcomp class="threecomp" @your-fun="testFun"></pagingcomp> 

注意:@your-fun="testFun"就是將外部方法testFun和組件內的yourFun進行關聯,千萬注意寫法@your-fun,@ + 內部方法駝峰拆開全小寫用‘-’連接

四、代碼展示

pagingcomp.js

  1. import document from '@ohos.document'
  2. export default { 
  3.     /* 組件可接收的參數setTotalnum,setPageount 
  4.     使用時 setTotalnum 寫成 set-totalnum 
  5.     setPageount 寫成 set-pageount 
  6.     */ 
  7.     props: ['setTotalnum','setPageount'], 
  8.     data: { 
  9.         value: "組件創建"
  10.         //記錄條數 外部可設置 
  11.         totalnum:101, 
  12.         //總頁數,內部值 
  13.         totalpage:0, 
  14.         //開始頁碼 內部值 
  15.         startpage:1, 
  16.         //當前頁碼 內部值 
  17.         curpage:1, 
  18.         //每頁顯示記錄的條數 外部可設置 
  19.         pagecount:5, 
  20.         //當前頁顯示的記錄開始ID  傳出參數 
  21.         startnum:0, 
  22.         //當前頁顯示的記錄結束ID 傳出參數 
  23.         endnum:0, 
  24.         //顯示的頁碼按鈕數 
  25.         itemnum:5, 
  26.         //對應頁碼按鈕的狀態值 顯隱、顯示值、樣式 
  27.         itemlist:[{ 
  28.             lshow:true
  29.             value:0, 
  30.             bgstyle:"three"
  31.         }, { 
  32.             lshow:true
  33.             value:0, 
  34.             bgstyle:"three"
  35.         },{ 
  36.             lshow:true
  37.             value:0, 
  38.             bgstyle:"three"
  39.         },{ 
  40.             lshow:true
  41.             value:0, 
  42.             bgstyle:"three"
  43.         },{ 
  44.             lshow:true
  45.             value:0, 
  46.             bgstyle:"three"
  47.         }], 
  48.  
  49.     }, 
  50.  
  51.     /* 組件初始化 */ 
  52.     onInit() { 
  53.         console.log("組件創建"
  54.         this.setAttr(); 
  55.     }, 
  56.  
  57.     /* 組件掛載時主動調用 */ 
  58.     onAttached() { 
  59.         this.value = "組件掛載" 
  60.         console.log("組件掛載"
  61.     }, 
  62.  
  63.     /* 組件摘除 */ 
  64.     onDetached() { 
  65.         this.value = "2222" 
  66.         console.log("2222"
  67.     }, 
  68.  
  69.     /* 頁面顯示時自動調用 */ 
  70.     onPageShow() { 
  71.         this.checkCurPage(); 
  72.         this.checkShow(); 
  73.         this.calcItemNum(); 
  74.  
  75.         // 發布回調事件 事件ID “yourFun” 使用處需寫成 "your-fun" 
  76.         this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 
  77.     }, 
  78.  
  79.     /* 處理傳入參數 */ 
  80.     setAttr(){ 
  81.         if(typeof(this.setTotalnum) != 'undefined'){ 
  82.             this.totalnum = this.setTotalnum; 
  83.         } 
  84.  
  85.         if(typeof(this.setPageount) != 'undefined'){ 
  86.             this.pagecount = this.setPageount; 
  87.         } 
  88.     }, 
  89.  
  90.     /* 檢查當前頁碼的合法性 */ 
  91.     checkCurPage(){ 
  92.         this.totalpage = Math.ceil(this.totalnum / this.pagecount); 
  93.         if (this.curpage > this.totalpage) 
  94.         this.curpage = this.totalpage; 
  95.  
  96.         if(this.totalpage <= 0){ 
  97.             this.totalpage = 0; 
  98.             this.curpage = 0; 
  99.         } 
  100.     }, 
  101.  
  102.     /* 檢查上一頁和下一頁中間的按鈕顯示情況 */ 
  103.     checkShow(){ 
  104.         for (var index = 0; index < 5; index++) { 
  105.             var isShow = this.startpage + index <= this.totalpage ? true : false
  106.             this.itemlist[index].lshow = isShow; 
  107.             this.itemlist[index].value = this.startpage + index
  108.             if(this.startpage + index == this.curpage) 
  109.             { 
  110.                 this.itemlist[index].bgstyle = "threeChoose"
  111.             } else { 
  112.                 this.itemlist[index].bgstyle = "three"
  113.             } 
  114.         } 
  115.     }, 
  116.  
  117.     /* 計算選中頁的起始序號 */ 
  118.     calcItemNum(){ 
  119.         var nstart = (this.curpage - 1) * this.pagecount; 
  120.         nstart = (nstart < 0) ? 0 : nstart; 
  121.         var nend = this.curpage * this.pagecount; 
  122.         nend = nend > this.totalnum ? this.totalnum : nend; 
  123.         this.startnum = nstart + 1; 
  124.         this.endnum = nend; 
  125.         this.value = "顯示ID范圍:" + this.startnum + "-" + this.endnum; 
  126.     }, 
  127.  
  128.     /* 重設上一頁和下一頁中間的開始頁碼 */ 
  129.     setStartNum(){ 
  130.         if(this.curpage <= this.startpage || this.curpage >= this.startpage + this.itemnum - 1) 
  131.         { 
  132.             this.startpage = this.curpage - Math.floor(this.itemnum / 2); 
  133.             this.startpage = this.startpage < 1 ? 1 : this.startpage; 
  134.         } 
  135.     }, 
  136.  
  137.     /* 上一頁按鈕事件 */ 
  138.     pageUp(){ 
  139.         this.curpage -= 1; 
  140.         if(this.curpage < 1){ 
  141.             this.curpage = 1; 
  142.         } 
  143.         this.setStartNum(); 
  144.         this.checkShow(); 
  145.         this.calcItemNum(); 
  146.         this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 
  147.     }, 
  148.     /* 下一頁按鈕事件 */ 
  149.     pageDown(){ 
  150.         this.curpage += 1; 
  151.         if(this.curpage > this.totalpage){ 
  152.             this.curpage = this.totalpage; 
  153.         } 
  154.         this.setStartNum(); 
  155.         this.checkShow(); 
  156.         this.calcItemNum(); 
  157.         this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 
  158.     }, 
  159.     /* 首頁按鈕事件 */ 
  160.     homePage(){ 
  161.         this.curpage = 1; 
  162.         this.setStartNum(); 
  163.         this.checkShow(); 
  164.         this.calcItemNum(); 
  165.         this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 
  166.     }, 
  167.     /* 尾頁按鈕事件 */ 
  168.     lastPage(){ 
  169.         this.curpage = this.totalpage; 
  170.         this.setStartNum(); 
  171.         this.checkShow(); 
  172.         this.calcItemNum(); 
  173.         this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 
  174.     }, 
  175.     /* 上一頁和下一頁中間的按鈕事件 */ 
  176.     changeYeMa(e){ 
  177.         this.curpage = e; 
  178.         this.setStartNum(); 
  179.         this.checkShow(); 
  180.         this.calcItemNum(); 
  181.         this.$emit('yourFun', {startnum: this.startnum,endnum: this.endnum}); 
  182.     }, 

pagingcomp.hml

  1. <div class="item"
  2.     <div class="test"
  3.         <button class="one" onClick="homePage">首頁</button> 
  4.         <button class="two" onClick="pageUp" value="pageUp">上一頁</button> 
  5.         <div for="{{itemlist}}" > 
  6.             <button onClick="changeYeMa($item.value)" name="page" class="{{ $item.bgstyle}}" if="{{$item.lshow}}">{{$item.value}}</button> 
  7.         </div> 
  8.         <button class="two" onClick="pageDown" value="page_down">下一頁</button> 
  9.         <button class="one" onClick="lastPage">尾頁</button> 
  10.     </div> 
  11. </div> 

pagingcomp.css

  1. .item { 
  2.     flex-direction: column
  3.     justify-content: center; 
  4.     align-items: center; 
  5.     width: 100%; 
  6.     height: 100%; 
  7.  
  8. .test{ 
  9.     flex-direction: row; 
  10.     justify-content: flex-end
  11.     align-items: flex-start; 
  12.     font-size: 20px; 
  13.     width: 100%; 
  14.     height: 100%; 
  15.  
  16. .one{ 
  17.     width:15%; 
  18.     text-color:red; 
  19.     background-color:cornflowerblue 
  20.  
  21. .two{ 
  22.     width:20%; 
  23.     text-color:orange; 
  24.     background-color: cornflowerblue; 
  25.  
  26. .three{ 
  27.     width: 30px; 
  28.     align-content: center; 
  29.     background-color: black; 
  30.     border-color:chartreuse; 
  31.     border: 0.5px; 
  32.  
  33. .threeChoose{ 
  34.     width: 30px; 
  35.     align-content: center; 
  36.     background-color:red; 
  37.     border-color:chartreuse; 

index.hml

  1. <element name='pagingcomp' src='../../common/component/pagingcomp.hml'></element> 
  2. <div class="container"
  3.     <text class="title"
  4.         {{ $t('strings.hello') }} {{ title }} 
  5.     </text> 
  6.     <div class="text-style"
  7.         <text >{{text}}</text> 
  8.     </div> 
  9.     <pagingcomp class="threecomp" @your-fun="testFun" set-totalnum='121' set-pageount='10'></pagingcomp> 
  10. </div> 

 index.js

  1. export default { 
  2.     data: { 
  3.         title: ""
  4.         text:""
  5.     }, 
  6.     onInit() { 
  7.         this.title = this.$t('strings.world'); 
  8.     }, 
  9.  
  10.     /* 自定義回調事件 */ 
  11.     testFun(e){ 
  12.         this.text = "顯示ID范圍:" + e.detail.startnum + "-" + e.detail.endnum; 
  13.         console.info(this.text); 
  14.  
  15.     } 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-03-21 15:19:27

鴻蒙UI組件ets自定義

2022-04-24 15:17:56

鴻蒙操作系統

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2023-02-20 15:20:43

啟動頁組件鴻蒙

2022-07-06 20:24:08

ArkUI計時組件

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統

2022-06-20 15:43:45

switch開關鴻蒙

2021-12-21 15:22:22

鴻蒙HarmonyOS應用

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2021-09-15 10:19:15

鴻蒙HarmonyOS應用

2022-06-30 14:02:07

鴻蒙開發消息彈窗組件

2009-06-24 15:13:36

自定義JSF組件

2021-03-09 15:23:45

鴻蒙HarmonyOS應用開發

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2022-07-12 16:56:48

自定義組件鴻蒙

2022-06-23 07:23:34

自定義組件計時器

2022-02-16 16:09:12

鴻蒙游戲操作系統

2021-12-24 15:46:23

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲日本精品 | 成人在线精品视频 | jdav视频在线观看免费 | 天堂一区二区三区四区 | 国产精品一区二区无线 | 国产中文字幕在线 | 日韩欧美在线观看视频网站 | 能免费看的av | 日日操夜夜操天天操 | 精品一区二区久久久久久久网精 | 在线观看黄视频 | 午夜影院官网 | 国产精品18hdxxxⅹ在线 | chinese中国真实乱对白 | 久久久久久久久久久久久久国产 | 免费天天干 | 欧美理论在线观看 | 免费黄色大片 | 91精品亚洲 | 亚洲色欲色欲www | 亚洲视频 欧美视频 | 中文字幕一区在线观看视频 | 国产精品乱码一区二区三区 | 伊人久久免费视频 | 国产精品久久久久久福利一牛影视 | 午夜视频网站 | 久久9999久久 | www中文字幕 | 亚洲男人天堂网 | 久久激情网 | 久久1区| 亚洲激情第一页 | 亚洲黄色国产 | 日韩电影在线一区 | 婷婷成人在线 | 91毛片在线看 | 国外成人免费视频 | 国产激情视频在线观看 | 99久久国产精 | 久久综合伊人 | 91麻豆精品一区二区三区 |