详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第三节 (封装TabBar JS版)

news/2024/7/21 8:18:53 标签: vue.js, harmonyos, 前端

一、Tabbar组件概述

本组件通过HML布局、CSS样式和JS逻辑封装实现一个通用的Tabbar。支持可配置的Tab项和对应页面,可以方便接入到不同页面中,提高开发效率。

二、实现方式

  1. HML部分采用Flex布局实现Tabbar的整体结构,包含多个Tab项。
  2. CSS部分定义样式,包括图标大小、文字颜色等样式参数。支持后续扩展。
  3. JS部分提供组件的核心逻辑。
  • 定义Tab项数据,支持配置页面路由、图标、标签等信息。
  • 利用系统API dynamical添加点击事件,进行路由跳转等功能。

三、使用方法

  1. 页面HML布局部分直接引入Tabbar组件节点。
  2. JS逻辑初始化时配置所需的Tab项数据。包括页面、图标、标签等。
  3. 传入配置数据,绑定点击事件,实现路由跳转等功能。

四、代码示例

// tabbar组件
@Component
struct TabBar {

  build() {
    Row() {
      Column() { 
        Image($r('app'))
          .onClick(() => {
            // 点击图片事件处理
          })
        Text('首页') 
          .onClick(() => {
             // 点击文字事件处理
          })
      }
      Column() {
        // 其他Tab Item
      }
    }
  } 
}

// 登录页面使用
@Component
struct LoginPage {

  build() {
    Column() {
      // 登录页面内容  
      
      TabBar() 
    }
  }

}

上面是Tabbar的组件代码,通过Row和Column布局,内部可以放置图片、文字等元素。并且可为每个item添加点击事件。

在登录页面底部,直接实例化并使用该TabBar组件。

这实现了Tabbar的复用,以及和页面的解耦。

接下来,我们可以通过参数形式,使Tabbar可配置:

// 定义Tab项配置
const tabs = [{
  icon: 'app',
  text: '首页'
}, {
  //...其他
}]

// Tabbar组件
struct TabBar {

  build() {
    Row() {
      tabs.forEach(item => {
        Column() {
          Image($r(item.icon))
          Text(item.text)
        }.onClick(() => {
          //...
        })  
      }
    }
  }

}

// 使用时配置
TabBar({
  tabs
})

上面我们通过传入tabs参数,使Tabbar可以动态配置,而不需要每次修改组件代码。

完整的使用示例:

hml:

<!-- 1. HML布局 -->
<div class="container">

  <!-- 页面内容 -->
  <div class="content"></div>

  <!-- Tabbar -->
  <div class="tab-bar">
    <div class="tab-item">      
      <image class="icon"></image>
      <text class="label"></text>
    </div>
    <div class="tab-item"></div>
    ...
  </div>

</div>

css:

/* 2. CSS样式 */  
.container {
  display: flex;
  flex-direction: column;  
  justify-content: space-between; 
}

.content {
  flex: 1;  
}

.tab-bar {
  flex-direction: row;
}

.tab-item {
  flex-direction: column;
  align-items: center;  
}

.icon {
  width: 30px;
  height: 30px;
}

.label {
  font-size: 12px;
}

js:

// 3. js逻辑
import router from '@system.router';

// Tab配置
const tabs = [
  {
    icon: 'home',
    text: '首页',
    page: 'pages/home'
  },  
  //...
];

// 获取节点
const tabItems = document.getElementsByClassName('tab-item');

// 绑定点击事件  
tabItems.forEach((item, index) => {

  item.onclick = () => {
    
    // 拿到配置
    let config = tabs[index];
    
    // 跳转页面 
    router.replace({uri: config.page});

  };

});

在HML中通过div布局Tabbar结构,JS中动态绑定每个tab的点击事件,配合CSS定义样式。

这个示例中,Tab实现了图标、标题和关联页面的配置,可满足通用的Tab组件需求。

五、扩展方向

当前组件提供了Tabbar的基础功能,后续可以继续优化:

  • 支持更丰富的样式定制需求。
  • 增加Badge、红点等扩展视图。
  • 动态获取Tab项数据,而不是编码形式。
  • 加入应用间通信、数据共享等能力。

六、结语

上一节:详细教程 - 从零开发 Vue 鸿蒙应用 第二节 (鸿蒙Stage模型 登录页面)


http://www.niftyadmin.cn/n/5263271.html

相关文章

大语言模型--危害

危害 大语言模型 危害概述有毒性预期信息内容审查 概述 在本次内容中&#xff0c;我们将讨论另外两种行为伤害&#xff1a;有毒性和虚假信息&#xff08;毒性和虚假信息&#xff09;大型语言模型可能会产生攻击性、有害的内容&#xff0c;或者产生虚假性的内容。然而&#xff…

WT2003H4-16S语音芯片:扭蛋机新潮音乐,娱乐升级无限

在扭蛋机的乐趣世界里&#xff0c;唯创知音的WT2003H4-16S语音芯片&#xff0c;作为MP3音乐解码播放IC&#xff0c;为扭蛋机带来了更智能、更富有趣味的音乐体验&#xff0c;为玩家打开了娱乐升级的无限可能。 1. 机启音乐&#xff0c;欢迎扭蛋之旅 扭蛋机启动时&#xff0c;…

4、Kafka 核心常用配置项

Kafka 核心常用配置项 1、Broker 端配置1.1、Broker 配置存储信息1.2、Broker 配置连接信息1.3、Broker 配置 Topic 管理信息1.4、Broker 配置 数据留存 管理信息 2、Topic 级别参数2.1、级别问题2.2、三个核心配置项 3、JVM 参数4、操作系统参数 以下参数都是那些要修改默认值…

Kotlin语言第一篇:我是谁?

Kotlin 是一种静态类型的编程语言&#xff0c;最初由 JetBrains 公司于2011年推出。它可以在 Java 虚拟机&#xff08;JVM&#xff09;上运行&#xff0c;并且可以编译成 JavaScript 或本机代码。Kotlin 设计的目标是简洁、表达力强&#xff0c;并且与现有的 Java 代码具有良好…

MySQL和Minio数据备份

文章目录 一、MySQL数据备份1. MySQL客户端2. 数据增量备份3. 数据增量还原4. 数据全量备份5. 数据全量还原 二、Minio数据备份1. Minio客户端2. 数据备份3. 数据还原 三、其他参考1. 设置定时备份2. 数据拷贝到其他服务器3. MySQL其他语句 一、MySQL数据备份 Linux环境&#…

FolkMQ 国产消息中间件,v1.0.21 发布

简介 采用 “多路复用” “内存运行” “快照持久化” “Broker 集群模式”&#xff08;可选&#xff09;基于 Socket.D 网络应用协议 开发。全新设计&#xff0c;自主架构&#xff01; 角色功能生产端发布消息&#xff08;Qos0、Qos1&#xff09;、发布定时消息&#xff…

企业网络新阶段:SD-WAN在云时代的关键作用

随着云时代的到来&#xff0c;企业正纷纷将IT系统迁移到公有云上&#xff0c;以迎合快速变化的业务需求。在这一浪潮中&#xff0c;企业SD-WAN&#xff08;软件定义广域网&#xff09;的角色变得至关重要。本文将深入探讨SD-WAN在云时代的关键作用&#xff0c;以及为企业网络带…

算法通关村第十八关-白银挑战回溯热门问题

大家好我是苏麟 , 今天带来几道小题 . 回溯主要解决一些暴力枚举也搞不定的问题&#xff0c;例如组合、分割、子集、排列&#xff0c;棋盘等。这一关我们就看几个例子 大纲 回溯热身-再论二叉树路径问题二叉树的所有路径路径总和 II 回溯热门问题组合总和问题组合总和 子集问题…