“微商城”项目(3页面布局)

news2024/11/23 23:31:34

1.设置标题

设置页面头部标题,方便告诉用户当前显示的是哪一个页面。编辑src\router.js文件,示例代码如下。

routes: [
    { path: '/', redirect: '/home', meta: { title: '首页' } },
    { path: '/home', component: Home, name: 'home', meta: { title: '首页' } }
]
router.beforeEach((to, from, next) => {
  if (to.meta.title) {
    document.title = to.meta.title
  }
  next()
})

 上述代码中,给每个路由添加meta属性的页面title,需要借助router.beforeEach()钩子函数来实现,效果如下图所示。

 2.页面头部

 在src\App.vue组件中使用$route.meta.title获取meta数据,如下所示。

<div class="container">
  <mt-header fixed :title="$route.meta.title">
  </mt-header>
  <router-view></router-view>
</div>

执行上述代码后,页面效果如下图所示。

关闭语法检查

修改项目的根目录下的vue.config.js文件

lintOnSave:false,//关闭语法检查

 3.标签页切换

在src\App.vue文件中,添加页面底部标签栏tabbar组件,示例代码如下。

<div class="container">
  ……(原有代码)
  <tabbar></tabbar>
</div>

在JavaScript代码中导入tabbar.vue组件,示例代码如下。

<script>
import tabbar from './components/tabbar.vue'
export default {
  components: {
    tabbar
  }
}
</script>

编写src\components\tabbar.vue文件的HTML结构代码,示例代码如下。

<template>
  <nav class="mui-bar mui-bar-tab">
<router-link class="mui-tab-item-lib" :to="{name: 'home'}">
      <span class="mui-icon mui-icon-home"></span>
      <span class="mui-tab-label">首页</span>
</router-link>
<router-link class="mui-tab-item-lib" :to="{name: 'category'}">
      <span class="mui-icon mui-icon-personadd"></span>
    <span class="mui-tab-label">分类</span>
</router-link>
<router-link class="mui-tab-item-lib" :to="{name: 'shopcart'}">
    <span class="mui-icon mui-icon-extra mui-icon-extra-cart">
      <span class="mui-badge">2</span>
    </span>
    <span class="mui-tab-label">购物车</span>
</router-link>
<router-link class="mui-tab-item-lib" :to="{name: 'user'}">
    <span class="mui-icon mui-icon-gear"></span>
    <span class="mui-tab-label">我的</span>
</router-link>
  </nav>
</template>

在src\router.js文件中将相关路由创建出来,示例代码如下。

import Home from './pages/Home.vue'
import Category from './pages/Category.vue'
import Shopcart from './pages/Shopcart.vue'
import User from './pages/User.vue'

在src\router.js文件中配置路由规则,示例代码如下。

routes: [
{ path: '/', redirect: '/home', meta: { title: '首页' } },
{ path: '/home', component: Home, name: 'home', meta: { title: '首页' } },
{ path: '/category', component: Category, name: 'category', meta: { title: '分类' } },
{ path: '/shopcart', component: Shopcart, name: 'shopcart', meta: { title: '购物车' } },
{ path: '/user', component: User, name: 'user', meta: { title: '我的' } },
],

因为项目中用不到src\components\HelloWorld.vue文件,所以在src\router.js文件中把该文件的相关路由配置删除。

接下来,编写router.js文件中定义好的4个标签页对应的组件文件,测试是否跳转成功。示例代码如下。

创建src\pages\Home.vue文件,示例代码如下

<template>
  <div>首页</div>
</template>

创建src\pages\Category.vue文件,示例代码如下。

<template>
  <div>分类</div>
</template>

创建src\pages\Shopcart.vue文件,示例代码如下。

<template>
  <div>购物车</div>
</template>

创建src\pages\User.vue文件,示例代码如下。

<template>
  <div>我的</div>
</template>

以首页面为例,效果图如下

 美化标签栏样式,在src\components\tabbar.vue组件中,编写如下样式代码。

<style scoped>
.mui-bar-tab .mui-tab-item-lib.mui-active {
    color: #007aff
}
.mui-bar-tab .mui-tab-item-lib {
    display: table-cell;
    overflow: hidden;
    width: 1%;
    height: 50px;
    text-align: center;
    vertical-align: middle;
    white-space: nowrap;
    text-overflow: ellipsis;
    color: #929292;
}
.mui-bar-tab .mui-tab-item-lib .mui-icon {
    top: 3px;
    width: 24px;
    height: 24px;
    padding-top: 0;
    padding-bottom: 0;
}
.mui-bar-tab .mui-tab-item-lib .mui-icon ~ .mui-tab-label {
    font-size: 11px;
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
}
</style>

激活底部标签栏样式,在src\router.js文件中配置linkActiveClass选项,设置底部导航栏选中样式的切换,示例代码如下。

var router = new VueRouter({
  routes: [
    ……(原有代码)
  ],
  linkActiveClass: 'mui-active'
})

底部导航栏选中样式激活后的效果图如下。

 4.动画效果

在src\App.vue文件中,当标签页切换的时候,给页面添加动画效果,示例代码如下。

<transition name="fade">
<router-view></router-view>
</transition>

 在<style>标签中添加CSS样式,示例代码如下。

.fade-enter {
  opacity: 0;
  transform: translateX(100%)
}
.fade-leave-to {
  opacity: 0;
  transform: translateX(-100%);
  position: absolute;
}
.fade-enter-active, .fade-leave-active {
  transition:all .5s ease;
}

 保存上述代码,测试动画效果。

5.返回按钮

打开app,通常页面左上角会显示返回箭头,提示用户单击此按钮可以返回上一级页面,首页的左上角不需要显示该返回箭头。

在src\App.vue文件中,通过v-show指令绑定定义变量showBack来判断是否显示“返回”按钮,示例代码如下。

<div class="container">
  <mt-header fixed :title="$route.meta.title">
    <span slot="left" @click="goBack" v-show="showBack">
      <mt-button icon="back">返回</mt-button>
    </span>
  </mt-header>
</div>

 在data中设置showBack的初始值为false,然后使用watch监听路由,如果当前是首页那么隐藏返回按钮,否则显示返回按钮,并在methods中定义goBack()事件实现单击按钮,返回上一级页面。示例代码如下。

export default {
  data() {
    return {
      showBack: false
    }
  },
  created () {
    this.showBack = this.$route.path !== '/home'
  },
  watch: {
    '$route.path' (newVal) {
      this.showBack = newVal !== '/home'
    }
  },
  methods: {
    goBack() {
      this.$router.go(-1)
    },
},
……(原有代码)
}

 保存上述代码,查看返回按钮是否会显示出来,页面效果如下图所示。

接着这篇文章的是“微商城”项目(4首页)

若出现问题可以私信我,我如果能解决,会尽量帮忙的(●ˇ∀ˇ●)

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

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

相关文章

ConditionObject的await方法分析

ConditionObject的await方法分析 判断当前线程是否中断&#xff0c;中断直接抛出非法监视器状态异常要是没有中断则通过addConditionWaiter()方法将该节点加入到Condition的单向链表中通过fullyRelease(node)方法一次新释放掉锁资源初始化一个状态模式为0的标记执行while判断&…

Linux基础【Linux开发】

Linux基础【Linux开发】 1.Linux系统结构2.Linux内核下载流程3. 文本编辑器4. 软件包管理5. shell命令5.1 shell作为命令语言5.2 shell作为编程语言 6. makefile工程管理文件 1.Linux系统结构 2.Linux内核下载流程 Linux内核官方网站&#x1f447; 3. 文本编辑器 vim 老…

TextCNN:用于文本分类的CNN网络

参考资料&#xff1a;文本分类之TextCNN与DPCNN TextCNN 是在2014年的论文 《Convolutional Neural Networks for Sentence Classification》中提出来的。 以下是TextCNN的网络结构&#xff1a; &#xff08;1&#xff09;TextCNN的第一层为 Embedding 层 Embedding 层的输入…

C++的右值引用和移动语义

1.左值和右值 在C中&#xff0c;每个表达式或者是左值&#xff0c;或者是右值。 左值(lvalue)&#xff1a;可以出现在赋值表达式左侧的值&#xff0c;例如变量名a、数据成员a.m、解引用表达式*p等。左值可以被赋值和取地址。右值(rvalue)&#xff1a;只能出现在赋值表达式右侧…

十七、多线程(下)

文章目录 一、线程互斥&#xff0c;它是对的&#xff0c;但是不合理&#xff08;饥饿问题&#xff09;——同步二、条件变量&#xff08;一&#xff09;概念&#xff08;二&#xff09;条件变量接口1. pthread_cond_init 创建条件变量2. pthread_cond_wait 等待条件满足3. pthr…

类的成员之:构造器(构造方法)

1.构造器的特征&#xff1a; 它具有与类相同的名称它不声明返回值类型。&#xff08;与声明为void不同&#xff09;不能被static、final、synchronized、abstract、native修饰&#xff0c;不能有return语句返回值 2.构造器的作用&#xff1a; 1.创建对象2.初始化对象的…

StackLLaMA: A hands-on guide to train LLaMA with RLHF

Paper name StackLLaMA: A hands-on guide to train LLaMA with RLHF Paper Reading Note Project URL: https://huggingface.co/blog/stackllama Code URL: https://huggingface.co/docs/trl/index TL;DR Huggingface 公司开发的 RLHF 训练代码&#xff0c;已集成到 hugg…

产品设计-产品设计五要素

概念介绍 产品设计五要素分别是&#xff1a;战略层、范围层、结构层、框架层、表现层。自上而下的分析可用来分析已有的产品&#xff0c;自下而上分析则可以用来创造新的产品。下面是各个层级所包括的内容&#xff1a; 战略层&#xff1a;产品目标和用户需求&#xff08;做什…

【STL(2)】

STL&#xff08;2&#xff09; 知识点回顾函数对象函数对象理解系统的仿函数仿函数应用 容器适配器stackdeque queuepriority_queue mapmap使用插入访问下标访问的应用&#xff1a;计算文件中单词的个数 知识点回顾 在STL库中存在三个容器适配器&#xff0c;stack - queue - p…

西门子200系列PLC学习课程大纲(课程筹备中)

西门子200系列PLC学习课程大纲如下表所示&#xff0c;共106课&#xff0c;关注我&#xff0c;让你从菜鸟变大神。 第1课西门子200PLC概述S7-200 PLC新特性是什么第2课S7-200 PLC的CPU介绍第3课S7-200 PLC编程软件介绍第4课S7-200 PLC通信方式有哪些第5课S7-200 PLC显示面板介绍…

6.1——我在CSDN的创作纪念日

文章目录 ⭐前言⭐相遇CSDN⭐切换到编程赛道的契机&#x1f496; 好好的美工为什么切换编程赛道&#x1f496; 转换编程赛道的催化剂 ⭐写博客的目的——写给未来的自己&#x1f496; 初衷——为学习铺路&#x1f496; 博客是灯——照亮前行的路&#x1f496; 博客是路——互联…

wenet-基于预训练模型进行增量训练

1867-154075-0014 重中之重 run.sh脚本分析 wenet aishell脚本解析_weixin_43870390的博客-CSDN博客 一、准备工作 第一步&#xff1a;准备训练数据&#xff0c;拷贝到远程服务器 将准备好的数据文件0529_0531_dataset&#xff0c;上传到恒源云上的/hy-tmp/wenet/example…

数据结构与算法10:递归树、Trie树、B+树

目录 【递归树】 【Trie 树】 【B树】 【每日一练&#xff1a;最长公共前缀】 【递归树】 递归的思想是将大问题分解为小问题&#xff0c;然后再将小问题分解为更小的问题&#xff0c;直到问题的数据规模被分解得足够小&#xff0c;不用继续递归分解为止。如果把这个一层…

Effective第三版 中英 | 第2章 创建和销毁对象 | 用私有构造器或者枚举类型强化 Singleton 属性

文章目录 Effective第三版前言第二章 创建和销毁对象用私有构造器或者枚举类型强化 Singleton 属性 Effective第三版 前言 大家好&#xff0c;这里是 Rocky 编程日记 &#xff0c;喜欢后端架构及中间件源码&#xff0c;目前正在阅读 effective-java 书籍。同时也把自己学习该书…

如何在本地配置Github的项目--Python

如何在本地配置Github的项目 0. 引言1. 初步预览2. 配置环境2.1 环境已经给出2.2 环境未曾给出 3. 数据配置4. 依次调试5. 配置完成总结 0. 引言 Github上存在大量的代码。当下载下来后可能会存在疑惑&#xff1a;如何在本地配置对应的项目呢&#xff1f; 为了帮助新手解决这一…

【Android开发基础】购物车代码整理

文章目录 一、数据库设计二、Home界面三、购物车模块四、添加五、源代码 这个月总算忙完了&#xff0c;总算能够抽出时间来&#xff0c;认真写一下博客了。整理一下购物车的代码 一、数据库设计 基于SqLite简单设计一个数据存储逻辑 实体&#xff08;接收数据&#xff09; im…

【数据加密】古典密码Playfair

文章目录 一、引言1、主要任务2、分支3、密码体制分类4、攻击密码系统 二、普莱费厄体制1、构造字母表&#xff0c;设为密钥矩阵2、设立加密方法3、加密解密4、字典集合5、结果 一、引言 1、主要任务 解决信息的保密性和可认证问题&#xff0c;保证信息在生成、传递、处理、保…

Swin-Transformer详解

Swin-Transformer详解 0. 前言1. Swin-Transformer结构简介2. Swin-Transformer结构详解2.1 Patch Partition2.2 Patch Merging2.3 Swin Transformer Block2.3.1 W-MSA2.3.2 SW-MSA 3. 模型配置总结 0. 前言 Swin-Transformer是2021年微软研究院发表在ICCV上的一篇文章&#x…

数据的存储(浮点型)

目录 浮点型存储的规则 1.前面我们已经学过了整形在数据中的存储是以原码&#xff0c;反码&#xff0c;补码的形式在内存中存储的&#xff0c;那么浮点数是以什么样的形式存储的呢&#xff1f; 接下来我们通过一段代码来观察——> int main() {int n 9;float* p (float*…

String AOP的使用

面向切面编程&#xff0c;面向特定方法编程&#xff0c;以方法为对象&#xff0c;在不修改原方法的基础上&#xff0c;对方法进行操作扩展等&#xff0c;底层是通过动态代理实现的 使用开发步骤&#xff1a; 1、创建一个类&#xff0c;加上Aspect声明为一个AOP切面类&#xff…