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

news2025/7/10 9:36:55

基于 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 的项目之旅吧~

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

element-UI组件之日期时间选择器与时间格式转化

element-UI组件之日期时间选择器与时间格式转化日期选择器与时间选择器的一般使用日期时间选择器选择日期时间点选择日期范围日期选择器月份范围选择器禁选日期用time.getTime()进行日期(时间)格式的转换时间选择器el-time-select选择固定时间点el-time-picker选择任意时间点禁…

Vite 基本配置及原理

Vite 基本配置及原理介绍vite.config.jsoptimizeDeps.exclude不同环境的 vite 配置css配置Vite 对 css 的处理Vite 对 cssmodule 的处理和配置Vite 对预处理器的配置devSourcemapVite 对 postcss 的支持Vite 静态资源别名设置Vite 生产环境配置介绍 如果你还不知道 Vite&#…

【Vue入门必备知识篇05】--- Vue Router路由

前言❤️ 当落日余晖照在身上&#xff0c;没有污秽没有杂尘&#xff0c;只有光和希望 ❤️【Vue入门必备知识篇05】--- Vue Router路由一、前端路由的概念与原理&#xff08;1&#xff09;什么是路由&#xff08;2&#xff09;SPA 与前端路由&#xff08;3&#xff09;什么是前…

vue-router中的参数传递

文章目录前言一、本文章中练习需要的准备工作暴力引入bootstrap安装Vue Router二、项目基本架构1. 配置router文件2. 写入路由组件 一级路由3. 二级路由 实现传参3.1 使用params 传参3.1.1 在router文件下配置二级路由3.1.2 在view文件下新建二级路由组件3.1.3 在上一级路由组件…

uniapp**字符串转Json并提取字段值

uniapp字符串转Json并提取字段值 JSON有三种格式&#xff0c;每一种写法都和JS中的数据类型很像&#xff0c;可以很轻松的和JS中的数据类型互相转换 一、简单值的形式&#xff1a;JSON的简单值的格式对应着JS中的基础数据类型&#xff1a;数字 字符串 布尔值 注意事项&#…

这是我见过最牛逼的滑动加载前端框架

文章目录前言一、mescroll简介二、快速开始三、一分钟入门mescroll图片懒加载四、mescroll在vue中的使用五、小结前言 在手机端实现下拉刷新和下拉加载是最常见不过的需求了。今天大师兄就给大家分享一个非常精致的js框架&#xff1a;mescroll. 提示&#xff1a;以下是本篇文…

Cursor:GPT-4 驱动的强大代码编辑器

Cursor &#xff08;https://www.cursor.so/&#xff09;是 GPT-4 驱动的一款强大代码编辑器&#xff0c;可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜&#xff0c;如下…

使用Python进行网站页面开发——HTML

目录 一、HTML基础语法 1.HTML是什么&#xff1f; 2.HTML基本结构 3.HTML注释 二、HTML常用标签介绍 1.文本标签 2.格式化标签 3.图片标签 4.超级链接标签 5.表格标签&#xff08;用来显示数据&#xff09; 6.表单标签&#xff08;用来接收数据&#xff09; 7.行内…

ACM模式下JavaScript(js)的输入输出 V8 Node

OJ在线编程常见输入输出练习场 ACM模式下分V8和node.js node.jsV8内置基本模块&#xff0c;相当于java中的JREJVMjava标准库 node就是带有能操作IO和网络库的V8引擎&#xff0c;提供了很多可调用的API使得JavaScript能够读写文件&#xff0c;网络请求&#xff0c;系统信息等…

【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」

文章目录1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置4.公网访问测试5.结语1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如网页…

前端项目如何部署到服务器实现网址访问

目录 前言 需要用到的东西 购买云服务器和域名 绑定域名 使用Xshell连接云服务器 下载Nginx 安装nginx 配置nginx 启动nginx 传输文件 配置防火墙 卸载自带的防火墙 安装iptables防火墙 最后 前言 写了那么久的前端&#xff0c;就想着让朋友们欣赏欣赏&#xff0…

ElementUI快速上手(jar包本地下载)

Element-ui是饿了么前端团队推出的基于vue进行开发的前端框架。 最近刚学了Element-ui&#xff0c;迫不及待练练手&#xff0c;却发现现成的组件样式用不了。引用官网的使用方法&#xff0c;如图&#xff1a; 展示的效果也是不尽人意&#xff0c;在百度的过程中发现可能是链接…

相对定位relative、绝对定位absolute、固定定位fixed

注&#xff1a;默认情况下的定位是 postion&#xff1a;static&#xff1b; 使用定位时&#xff0c;常常使用偏移量对位置进行描述&#xff1a;left、right、top、bottom定位时&#xff0c;使用z-indent可以元素的堆叠顺序&#xff0c;例&#xff1a;z-indent&#xff1a;1&…

Spring Security 权限控制

日积月累&#xff0c;水滴石穿 &#x1f604; 前言 项目版本Boot2.3.12.RELEASESecurity5.3.9.RELEASE 官网文档 在前面的文章中&#xff0c;所有的接口只需要登录就能访问。并没有对每个接口进行权限限制。 在正式的系统中&#xff0c;一个用户会拥有一个或者多个角色&#…

三种架构模式——MVC、MVP、MVVM

目录 前言 一、MVC&#xff08;Model-View-Controller&#xff09; 1、简介 2、框架图 二、MVP&#xff08;Model-View-Presenter&#xff09; 1、简介 2、框架图 三、MVVM&#xff08;Model-View-ViewModel&#xff09; 1、简介 2、框架图 四、总结 前言 MV系列框…

微信小程序插件--wxml-to-canvas(生成图片)

一、需求 项目中要实现一个将图片分享到朋友圈的功能&#xff0c;将生成的海报转成图片保存到手机。用到了wxml-to-canvas插件。 二、官方示例使用方法 1.安装wxml-to-canvas npm install --save wxml-to-canvas2.JSON 组件声明 {"usingComponents": {"wxml-t…

多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单

本文完整版&#xff1a;《多款顶级好用的 Vue 表单设计器测评推荐&#xff0c;可拖拽生成表单》 Vue 表单设计器form-generator - 适配 Element Plus UI 框架的表单设计器form-render - 阿里团队开源表单设计器&#xff0c;自家 Antd UI 框架友好form-create - 支持Vue3 及 Ele…

内网npm私有仓库搭建以及使用教程

前言 前端团队沉淀一套通用的UI库、工具类、脚手架&#xff0c;不允许在公网发布&#xff0c;内网npm私有库搭建需求应运而生。如何在内网环境搭建npm私有仓库并使用&#xff1f;主角登场了 —— Verdaccio。接下来我来教大家使用 verdaccio 在内网环境中搭建npm私有仓库。 基…

canvas详细入门教程(1W字 吐血分享)

大家好&#xff0c;我是潘潘 今天为大家带来的是我已经写了很久了的canvas详细教程&#xff0c;对入门canvas很有帮助。 点击跳转原文&#xff1a; canvas详细教程原文 canvas是什么&#xff1f; 简单来说&#xff0c;<canvas> 是HTML5中的标签&#xff0c;它是一个容…

20分钟学会flex布局,熊二都表示学会了,你呢?

✏️ 作者&#xff1a;大二计算机专业学生 ♉ 星座&#xff1a;金牛座 &#x1f3e0; 主页&#xff1a;查看更多文章 &#x1f3c2; 关键&#xff1a;flex 前端布局 熊二都会 大家好&#xff0c;我是小周&#xff0c;今天分享的是熊二都能学会的前端 flex 布局&#xff0c;篇幅…