草庐IT

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

前端杂货铺 2023-04-21 原文

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


文章目录

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

项目演示

Vue3 + Vant UI_多功能记账本

开发导航栏

1、底部导航栏

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

NavBar.vue

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

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

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

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  5. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  6. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  7. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  8. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  9. ruby-on-rails - rails 功能测试 - 2

    在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建

  10. ruby-on-rails - 功能测试 Authlogic? - 2

    在我的一些Controller中,我有一个before_filter检查用户是否登录?用于CRUD操作。application.rbdeflogged_in?unlesscurrent_userredirect_toroot_pathendendprivatedefcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefine

随机推荐