当前位置: 首页 > news >正文

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(开发导航栏及公共部分)

基于 Vue3.x + Vant UI 的多功能记账本(三)


文章目录

  • 基于 Vue3.x + Vant UI 的多功能记账本(三)
    • 项目演示
    • 开发导航栏
      • 1、底部导航栏
      • 2、测试底部导航栏
      • 3、公共头部
      • 写到最后(附源码)

系列内容参考链接
基于 Vue3.x + Vant UI 的多功能记账本(一)项目演示,涉及知识点
基于 Vue3.x + Vant UI 的多功能记账本(二)搭建开发环境

项目演示

Vue3 + Vant UI_多功能记账本

在这里插入图片描述

开发导航栏

1、底部导航栏

components 文件夹下,创建 NavBar.vue 组件

NavBar.vue

  • 详细内容请看代码和注释
  • van-tabbar-item 为标签栏

在这里插入图片描述

<template>
  <van-tabbar v-model="active">
    <!-- 三个导航,通过 link 方法切换相应路径对应的页面 -->
    <van-tabbar-item icon="notes-o" @click="link('/home')"
      >明细</van-tabbar-item
    >
    <van-tabbar-item icon="bar-chart-o" @click="link('/data')"
      >统计</van-tabbar-item
    >
    <van-tabbar-item icon="user-o" @click="link('/user')">我的</van-tabbar-item>
  </van-tabbar>
</template>

<script>
import { ref } from "vue";
import { useRouter } from "vue-router";
export default {
  name: "NavBar",
  props: {
    msg: String, // 限制 msg 的类型为字符串
  },
  // 相当于 vue2.x 的 beforeCreate 和 created
  setup() {
    // 使用路由
    const router = useRouter();
    const active = ref(0);

    // 路由跳转
    const link = (path) => {
      router.push({ path });
    };

    return {
      active,
      link,
    };
  },
};
</script>

Data.vue

<template>统计</template>

<script>
export default {
  name: "Data",
};
</script>

User.vue

<template>个人中心</template>

<script>
export default {
  name: "User",
};
</script>

在 src/router/inedx.js 将这三个页面给定对应的路径

// 用的是 hash 路由,不需要后端支持
import { createRouter, createWebHashHistory } from "vue-router";
import Home from '../views/Home.vue'
import Data from '../views/Data.vue'
import User from '../views/User.vue'

// 创建路由实例
const router = createRouter({
  history: createWebHashHistory(), // hash 模式
  routes: [
    {
      path: "/",
      component: Home
    },
    {
      path: "/home",
      component: Home
    },
    {
      path: "/data",
      component: Data
    },
    {
      path: "/user",
      component: User
    },
  ]
})

// 抛出路由实例
export default router

在 App.vue 中引入 NavBar 组件

App.vue

<template>
  <router-view />
  <NavBar />
</template>

<script>
import Home from "./views/Home.vue";
import NavBar from "./components/NavBar.vue";

export default {
  name: "App",
  components: {
    Home,
    NavBar,
  },
};
</script>

Vant UI 的新增组件,需要在 main.js 文件中引入

main.js

import { createApp } from 'vue'
import { Button, Tabbar, TabbarItem, Form, Field, Icon, NavBar } from "vant";
import "lib-flexible/flexible";
import App from './App.vue'
import router from './router'
import "vant/lib/index.css"; // 全局引入样式
import './index.css'

// 创建实例
const app = createApp(App)

// 注册组件 => 按需注册
app.use(router);
app.use(Tabbar);
app.use(TabbarItem);
app.use(Form);
app.use(Field);
app.use(Button); // 注册组件
app.use(Icon);
app.use(NavBar);

// 注册路由
app.use(router)

app.mount('#app')

此时,yarn dev,打开浏览器可以看到…

在这里插入图片描述

2、测试底部导航栏

./src/views 文件夹下新建一个 Login.vue 组件

Login.vue

<template>登录注册</template>

<script>
export default {
  name: "Auth",
};
</script>

在 ./src/router/index.js 文件中添加以下路由(导入和配置)

import Login from '../views/Login.vue'
...
{
  path: '/login',
  component: Login
}
...

在 User.vue 中添加跳转到登录注册的路由

User.vue

<template>
  <Header title="个人中心" />
  个人中心
  <router-link to="/login">前往登录注册</router-link>
</template>

<script>
import Header from "../components/Header.vue";
export default {
  name: "User",
  components: { Header },
};
</script>

在这里插入图片描述


在这里插入图片描述

3、公共头部

./components 文件夹中创建 Header.vue 文件

Header.vue

  • 公共头部,详细内容看代码和注释
<template>
  <!-- 占位标签,给的高度和 NavBar 组件一样高,这样就能将顶部撑开,不会让页面有一部分隐藏在 NavBar 后面 -->
  <div class="block"></div>
  <!-- title 通过变量的形式从外部传入,固定定位定位到页面顶部 -->
  <!-- left-text:返回标志,left-arrow:箭头标志 -->
  <van-nav-bar
    class="header"
    @click-left="back"
    :title="title"
    left-text="返回"
    left-arrow
  >
    <template #right>
      <!-- iconfont 的字体图标 -->
      <i class="iconfont more">...</i>
    </template>
  </van-nav-bar>
</template>

<script>
import { useRouter } from "vue-router";
export default {
  name: "Header",
  // 传入的 title 变量
  props: {
    title: {
      type: String,
      default: "",
    },
  },
  setup() {
    const router = useRouter();
    // 点击返回时,返回上一级
    const back = () => {
      router.back();
    };

    return {
      back,
    };
  },
};
</script>

<style lang="less" scoped>
.block {
  width: 100%;
  height: 46px;
}
.header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  .more {
    font-size: 20px;
    margin-bottom: 15px;
  }
}
</style>

导入头部组件并使用,title 是传给 Header.vue 的名字

Data.vue

<template>
  <Header title="统计" />
  统计
</template>

<script>
import Header from "../components/Header.vue";
export default {
  name: "Data",
  components: { Header },
};
</script>

Home.vue

<template>
  <Header title="明细" />
  明细
</template>

<script>
import Header from "../components/Header.vue";
export default {
  name: "Home",
  components: { Header },
};
</script>

User.vue

<template>
  <Header title="个人中心" />
  个人中心
</template>

<script>
import Header from "../components/Header.vue";
export default {
  name: "User",
  components: { Header },
};
</script>

在这里插入图片描述

写到最后(附源码)

看到这么好的项目,是不是有种想自己做出来的冲动?

如果有,那么说明你非常的想提升自己,想检验自己这段时间的学习成果,这个项目绝对是你的 不二选择

心动不如行动

那么接下来,一起从0搭建,开始我们基于 Vue3.x + Vant UI 的项目之旅吧~

源码放在了下方的微信公众号里【回复:记账本】即可

相关文章:

  • ScalableViT网络模型
  • Nginx配置流数据转发指导
  • 【单细胞高级绘图】10.KEGG富集结果的圆圈图
  • 怎样在应用中实现自助报表功能?
  • 生成指定位数的随机验证码
  • 线性布局和相对布局
  • 高级数据结构——红黑树
  • Python语言学习:Python语言学习之数据类型/变量/字符串/操作符/转义符的简介、案例应用之详细攻略
  • CentOS下安装及配置MySQL
  • 开发者说论文|人工智能为设备磨损“把脉”:依托飞桨开展的铁谱图像智能故障诊断研究...
  • 学习笔记4--自动驾驶汽车感知系统
  • rpy2: Unable to determine R library path:
  • kali超详细安装CUDA,安装java,安装go, docker
  • 虚拟机双网卡设置(外网+内网)
  • 基于蒲公英优化算法的函数寻优算法
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【React系列】如何构建React应用程序
  • 30天自制操作系统-2
  • centos安装java运行环境jdk+tomcat
  • es6(二):字符串的扩展
  • Git 使用集
  • PaddlePaddle-GitHub的正确打开姿势
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue-router 实现分析
  • windows下mongoDB的环境配置
  • 从零搭建Koa2 Server
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 深入 Nginx 之配置篇
  • 数据科学 第 3 章 11 字符串处理
  • 微服务框架lagom
  • 微信公众号开发小记——5.python微信红包
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 走向全栈之MongoDB的使用
  • MPAndroidChart 教程:Y轴 YAxis
  • ​Spring Boot 分片上传文件
  • #pragma预处理命令
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (007)XHTML文档之标题——h1~h6
  • (1)(1.11) SiK Radio v2(一)
  • (C++)八皇后问题
  • (LeetCode 49)Anagrams
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二十四)Flask之flask-session组件
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (力扣)1314.矩阵区域和
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三分钟)速览传统边缘检测算子
  • (四)c52学习之旅-流水LED灯
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .gitattributes 文件