国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能

這篇具有很好參考價(jià)值的文章主要介紹了HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

關(guān)鍵詞:harmonyOS? ?鴻蒙開發(fā)??ArkTS??TabContent

使用場(chǎng)景:類微信底部導(dǎo)航欄,點(diǎn)擊/左右滑動(dòng)切換頁面并加載數(shù)據(jù)

開發(fā)環(huán)境:ArkTS3.1? API9? Phone設(shè)備

HMOS Dev官方文檔:文檔中心

演示效果:

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

目錄

完整Demo已提交至Gitee

搭建頁面

自定義TabContent(往后翻有完整代碼)

思路

開始

完整自定義tabs代碼

頁面切換后如何加載新數(shù)據(jù)

介紹

父子組件解釋

開始

頁面切換時(shí)可加載新數(shù)據(jù)的完整代碼


完整Demo已提交至Gitee,傳送門:

鴻蒙ArkTS tabBar頁簽切換Demo: HarmonyOS鴻蒙ArkTS tabBar頁簽切換完整項(xiàng)目Demo

搭建頁面

我這里用三個(gè)頁面舉例,新建home、info、mine頁面,創(chuàng)建components目錄存放自定義Tabs組件,目錄結(jié)構(gòu)如下,我這里已經(jīng)準(zhǔn)備了6個(gè)圖標(biāo)圖片存放在了resources/rawfile/tabs

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

自定義Tabs(附完整代碼)

思路

index為應(yīng)用加載的首頁,加載自定義Tabs組件,Tabs組件中加載各個(gè)頁面

開始

HMOS Dev官方文檔 TabContent :文檔中心

1.首先在index.est中導(dǎo)入自定義Tabs組件,避免與官方組件沖突取名comTabs

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

2.在自定義Tabs組件中導(dǎo)入所建的三個(gè)頁面[如圖3],記得在頁面中使用export導(dǎo)出[如圖4]

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescriptHarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

[左圖3 | 右圖4]

3.設(shè)置一個(gè)PAGE的枚舉,增強(qiáng)可讀性,不喜歡用就0123代替,因?yàn)轫撁媲袚Q的回調(diào)函數(shù)返回的數(shù)值從0開始,所以給currentIndex默認(rèn)設(shè)置為0即為home頁(@State裝飾器修飾的屬性當(dāng)狀態(tài)改變時(shí),UI會(huì)發(fā)生對(duì)應(yīng)的渲染改變),changePage自己寫來用于更新頁面數(shù)據(jù)函數(shù),稍后會(huì)用到。別忘了new TabsController()[如圖3]

4.官方提供了多種頁簽樣式,我們使用置于底部的,將Tabs中barPosition屬性設(shè)置為BarPosition.End。Tabs將占用整個(gè)頁面,所以寬高需設(shè)置為100%。

Tabs組件中需要TabContent來加載頁面。[如圖5]

在tabBar中自定義頁簽按鈕樣式,因重復(fù)代碼太多,我們可以利用@Builder裝飾器來自定義構(gòu)建函數(shù)復(fù)用代碼。[如圖6]

注意:自定義頁簽設(shè)置onClick事件用于改變頁面索引,Tabs組件需設(shè)置onChange事件,不然頁面左右滑動(dòng)頁簽狀態(tài)不會(huì)改變。

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

[圖5]

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

[圖6]??

完整自定義tabs代碼

// tabs.ets

// home頁
import Home from '../pages/home/home'
// info頁
import Info from '../pages/info/info'
// mine頁
import Mine from '../pages/mine/mine'

enum PAGE{
  HOME = 0,
  INFO = 1,
  MINE = 2
}

@Preview
@Component
export default  struct compTabs{
  @State currentIndex: number = 0;
  private tabsController: TabsController = new TabsController();

  changePage(e){
    this.currentIndex = e
    if (e == PAGE.HOME){
    }
    if (e == PAGE.INFO){
    }
    if (e == PAGE.MINE){
    }
  }

  @Builder TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
    Column() {
      Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
        .size({ width: 20, height: 20 }).objectFit(ImageFit.Fill)
      Text(title)
        .fontColor(this.currentIndex === targetIndex ? '#484D54' : '#ff969da9')
        .fontSize(10).margin({top:3,bottom:3})
    }
    .width('100%')
    .height(67)
    .alignItems(HorizontalAlign.Center)
    .backgroundColor('#fff')
    .justifyContent(FlexAlign.Center)
    .onClick(() => {
      this.currentIndex = targetIndex;
      this.tabsController.changeIndex(targetIndex);
    })
  }

  build() {
    Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
      TabContent() {
        Home()
      }.tabBar(this.TabBuilder('首頁', 0, $rawfile('tabs/home_a.png'), $rawfile('tabs/home.png')))

      TabContent() {
        Info()
      }.tabBar(this.TabBuilder('信息', 1, $rawfile('tabs/service_a.png'), $rawfile('tabs/service.png')))

      TabContent() {
        Mine()
      }.tabBar(this.TabBuilder('我的', 2, $rawfile('tabs/me_a.png'), $rawfile('tabs/me.png')))
    }.onChange((index: number) => {
      this.changePage(index)
    })
    .width('100%')
    .height('100%')
  }
}

頁面切換后如何加載新數(shù)據(jù)

介紹

需要注意的是,在tabContent中不管有多少個(gè)頁面都會(huì)被一次性加載完,切換頁面不會(huì)達(dá)到頁面更新的效果。那么頁面切換后,如何加載頁面的數(shù)據(jù)呢,很簡(jiǎn)單,可以利用官方提供的@Link裝飾器(父子雙向同步)向子組件傳遞一個(gè)時(shí)間戳參數(shù)過去,頁面中使用@Watch監(jiān)聽這個(gè)時(shí)間戳屬性的變化觸發(fā)自定義的customShow函數(shù)。

或者可以增加 if 判斷頁面索引使其重新加載

父子組件解釋

在上述的tabs講述中導(dǎo)入了home頁面、info頁面、mine頁面,那這三個(gè)頁面就相當(dāng)于是tabs的子組件了

開始

1.給子組件設(shè)置@Link修飾的timer屬性(@Link修飾不用賦初值)

2.利用@watch監(jiān)聽一個(gè)自定義函數(shù)customShow,當(dāng)父組件的這個(gè)timer改變時(shí)子組件就會(huì)觸發(fā)這個(gè)函數(shù)[如圖9]

3.父組件Tabs設(shè)置三個(gè)屬性HomeTimer、InfoTimer、MineTimer,分別記錄每個(gè)頁面的時(shí)間戳,新增timeStamp函數(shù)返回當(dāng)前時(shí)間戳,在changePage函數(shù)觸發(fā)時(shí)獲取最新的時(shí)間戳[如圖7],TabContent中頁面里傳參時(shí)別忘了$符號(hào)[如圖8]

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

[圖7]

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

[圖8]

HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能,harmonyos,鴻蒙,typescript

[圖9]

同樣可以自定義頁面的銷毀等等,這是我在鴻蒙開發(fā)中最常用最省事最高效的辦法了,大家不妨試試。

頁面切換時(shí)可加載新數(shù)據(jù)的完整代碼

Tabs.est

// Tabs.ets

// home頁
import Home from '../pages/home/home'
// info頁
import Info from '../pages/info/info'
// mine頁
import Mine from '../pages/mine/mine'

enum PAGE{
  HOME = 0,
  INFO = 1,
  MINE = 2
}

@Preview
@Component
export default  struct compTabs{
  @State currentIndex: number = 0;
  @State HomeTimer: number = 0;
  @State InfoTimer: number = 0;
  @State MineTimer: number = 0;
  private tabsController: TabsController = new TabsController();

  changePage(e){
    this.currentIndex = e
    if (e == PAGE.HOME){
      this.HomeTimer = this.timeStamp()
    }
    if (e == PAGE.INFO){
      this.InfoTimer = this.timeStamp()
    }
    if (e == PAGE.MINE){
      this.MineTimer = this.timeStamp()
    }
  }

  timeStamp(){
    return new Date().getTime();
  }

  @Builder TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
    Column() {
      Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
        .size({ width: 20, height: 20 }).objectFit(ImageFit.Fill)
      Text(title)
        .fontColor(this.currentIndex === targetIndex ? '#484D54' : '#ff969da9')
        .fontSize(10).margin({top:3,bottom:3})
    }
    .width('100%')
    .height(67)
    .alignItems(HorizontalAlign.Center)
    .backgroundColor('#fff')
    .justifyContent(FlexAlign.Center)
    .onClick(() => {
      this.currentIndex = targetIndex;
      this.tabsController.changeIndex(targetIndex);
    })
  }

  build() {
    Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
      TabContent() {
        Home({ timer:$HomeTimer })
      }.tabBar(this.TabBuilder('首頁', 0, $rawfile('tabs/home_a.png'), $rawfile('tabs/home.png')))

      TabContent() {
        Info({ timer:$InfoTimer })
      }.tabBar(this.TabBuilder('信息', 1, $rawfile('tabs/service_a.png'), $rawfile('tabs/service.png')))

      TabContent() {
        Mine({ timer:$MineTimer })
      }.tabBar(this.TabBuilder('我的', 2, $rawfile('tabs/me_a.png'), $rawfile('tabs/me.png')))
    }.onChange((index: number) => {
      this.changePage(index)
    })
    .width('100%')
    .height('100%')
  }
}

home.est文章來源地址http://www.zghlxwxcb.cn/news/detail-755431.html

import promptAction from '@ohos.promptAction';

@Component
export default struct Home {
  @State message: string = 'home頁面'
  @Link @Watch('customShow') timer: Number

  customShow(){
    promptAction.showToast({
      message: "頁面展示"
    });
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

到了這里,關(guān)于HarmonyOS ArkTS TabContent組件實(shí)現(xiàn)類微信(可滑動(dòng)的)tabBar頁簽切換頁面功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • harmonyOS基礎(chǔ)(三)- 快速弄懂HarmonyOS ArkTs基礎(chǔ)組件、布局容器(前端視角篇)

    harmonyOS基礎(chǔ)(三)- 快速弄懂HarmonyOS ArkTs基礎(chǔ)組件、布局容器(前端視角篇)

    大家好!我是黑臂麒麟,一位6年的前端; 隨著 鴻蒙4.0 的發(fā)布。鴻蒙社區(qū)不斷壯大,且市場(chǎng)對(duì) harmonyOS 應(yīng)用認(rèn)可度越來越高。很多公司開始對(duì) 鴻蒙應(yīng)用開發(fā) 越來越重視。 之前想入坑鴻蒙,一直猶豫未下定決心學(xué)習(xí)。這次不再等待,開始系統(tǒng)學(xué)習(xí)起來。 此系列文章只做 harm

    2024年02月20日
    瀏覽(24)
  • HarmonyOS(二)—— 初識(shí)ArkTS開發(fā)語言(下)之ArkTS聲明式語法和組件化基礎(chǔ)

    HarmonyOS(二)—— 初識(shí)ArkTS開發(fā)語言(下)之ArkTS聲明式語法和組件化基礎(chǔ)

    通過前面ArkTS開發(fā)語言(上)之TypeScript入門以及ArkTS開發(fā)語言(中)之ArkTS的由來和演進(jìn)倆文我們知道了ArkTS的由來以及演進(jìn),知道了ArkTS具備了聲明式語法和組件化特性,今天,搭建一個(gè)可刷新的排行榜頁面。在排行榜頁面中,使用循環(huán)渲染控制語法來實(shí)現(xiàn)列表數(shù)據(jù)渲染,使

    2024年02月04日
    瀏覽(22)
  • HarmonyOS/OpenHarmony原生應(yīng)用-ArkTS萬能卡片組件Stack

    HarmonyOS/OpenHarmony原生應(yīng)用-ArkTS萬能卡片組件Stack

    堆疊容器,子組件按照順序依次入棧,后一個(gè)子組件覆蓋前一個(gè)子組件。該組件從API Version 7開始支持??梢园咏M件。 一、接口 Stack(value?: { alignContent?: Alignment }) 從API version 9開始,該接口支持在ArkTS卡片中使用。 二、屬性 除支持通用屬性外,還支持以下屬性: 三、示例

    2024年02月07日
    瀏覽(29)
  • 【HarmonyOS】ArkTS 組件內(nèi)轉(zhuǎn)場(chǎng)動(dòng)畫,動(dòng)畫播放時(shí)顏色異常問題

    【】 HarmonyOS、ArkTS、組件內(nèi)轉(zhuǎn)場(chǎng)動(dòng)畫、顏色異常 【問題描述】 根據(jù)組件內(nèi)轉(zhuǎn)場(chǎng)動(dòng)畫文檔中示例編寫代碼,使用動(dòng)畫轉(zhuǎn)場(chǎng)組件button,并給button設(shè)置背景色讓button透明度為0,實(shí)現(xiàn)動(dòng)畫轉(zhuǎn)場(chǎng)時(shí),會(huì)先出現(xiàn)默認(rèn)藍(lán)色button,然后動(dòng)畫再消失,問題代碼如下所示: 問題現(xiàn)象請(qǐng)見下

    2024年02月15日
    瀏覽(18)
  • 【鴻蒙軟件開發(fā)】ArkTS基礎(chǔ)組件之Select(下拉菜單)、Slider(滑動(dòng)條)

    【鴻蒙軟件開發(fā)】ArkTS基礎(chǔ)組件之Select(下拉菜單)、Slider(滑動(dòng)條)

    Select組件:提供下拉選擇菜單,可以讓用戶在多個(gè)選項(xiàng)之間選擇。 Slider組件:滑動(dòng)條組件,通常用于快速調(diào)節(jié)設(shè)置值,如音量調(diào)節(jié)、亮度調(diào)節(jié)等應(yīng)用場(chǎng)景。 提供下拉選擇菜單,可以讓用戶在多個(gè)選項(xiàng)之間選擇。 說明 該組件從API Version 8開始支持。后續(xù)版本如有新增內(nèi)容,則

    2024年02月07日
    瀏覽(27)
  • 微信小程序日歷組件(可滑動(dòng),可展開收縮,可標(biāo)點(diǎn))

    微信小程序日歷組件(可滑動(dòng),可展開收縮,可標(biāo)點(diǎn))

    效果圖 組件介紹 原生小程序編寫,簡(jiǎn)單輕便,拿來即用。 推薦從代碼托管地址獲取代碼,后續(xù)會(huì)更新功能: github地址 | gitee地址 代碼部分(這里可能不是最新的,推薦去gitee克隆代碼) calendar.wxml calendar.js calendar.json calendar.wxss

    2024年02月11日
    瀏覽(28)
  • 【HarmonyOS(ArkTS)學(xué)習(xí)筆記-3】認(rèn)識(shí)ArkTS語言

    【HarmonyOS(ArkTS)學(xué)習(xí)筆記-3】認(rèn)識(shí)ArkTS語言

    內(nèi)容學(xué)習(xí)來自華為開發(fā)者學(xué)習(xí)網(wǎng)站 文檔中心 https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/arkui-overview-0000001532577181-V3 目錄 認(rèn)識(shí)ArkTS開發(fā)語言 1.ArkTS 1.1 認(rèn)識(shí)ArkTS 1.2 ArkTS基本語法 2.TypeScript基礎(chǔ)語法介紹 2.1 基礎(chǔ)類型 2.1.1 布爾值(boolean) 2.1.2 數(shù)字(number) 2.1.3 字符串(s

    2024年01月21日
    瀏覽(40)
  • Android開發(fā)-UI界面--類微信頁面設(shè)計(jì)

    Android開發(fā)-UI界面--類微信頁面設(shè)計(jì)

    一、功能說明 二、開發(fā)技術(shù) ? 本次用到了 layout.xml、控件、監(jiān)聽、fragment layout(布局) ? 定義了用戶界面的可視化結(jié)構(gòu),主要有4種布局: ConstrainLayout (約束布局):一個(gè)使用“相對(duì)定位”靈活地確定微件的位置和大小的一個(gè)布局 LinearLayout (線性布局):按照水平或垂直

    2024年02月10日
    瀏覽(25)
  • 【HarmonyOS北向開發(fā)】-05 ArkTS開發(fā)語言-ArkTS開發(fā)實(shí)踐
  • 【HarmonyOS】ArkTS-函數(shù)

    【HarmonyOS】ArkTS-函數(shù)

    函數(shù):是可以被重復(fù)使用的代碼塊 作用:函數(shù)可以把具有相同或相似邏輯的代碼“包裹”起來,有利于代碼復(fù)用。 定義函數(shù) 調(diào)用函數(shù) 注意:先定義,后使用 (變量、函數(shù)都是如此) 根據(jù)我們傳入不同的數(shù)據(jù),進(jìn)行處理,返回處理后的結(jié)果。 箭頭函數(shù)是 比普通函數(shù) 更簡(jiǎn)潔

    2024年03月09日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包