nuxt.js 进行项目重构-首页

news2025/1/13 6:00:36

nuxt.js 也是基于vue 的 那么就离不开组件化开发  我们按照组件结构来进行分析

 navTop

页面的头部 通用组件 分隔了三个位置  适用于大多数头部  且预留插槽

<template>
  <div class="nav-top">
    <div class="left">
      <slot name="left"></slot>
    </div>
    <div class="center">
      <slot name="center"></slot>
    </div>
    <div class="right">
      <slot name="right"></slot>
    </div>
  </div>
</template>

<script>
  export default {
    name: "Navtop"
  }
</script>

<style scoped>
.nav-top{
  display: flex;
  line-height: 52px;
  height: 52px;
  overflow: hidden;
}

.left,.right{
  display: flex;
  width: 16%;
  align-items: center;
  justify-content: center;
  }



  .center{flex: 1}


</style>

 在首页使用

引入:

import navTop from '../components/common/navtop/Navtop'

注册

components:{
  navTop,
},

使用 左边放logo 中间搜索框 右边放 标识

  <navTop class="navtop">
    <div slot="left">
      <img src="~assets/img/common/logo-bai.png" alt=""  class="img1" @click="GoHome">
    </div>
    <div slot="center">
      <input type="text" class="input" placeholder="二建优学班" @click="GoSearch">
    </div>
    <div slot="right">
      <img src="~assets/img/tabbar/class-bai.svg" alt=""  class="img2 svg" @click="GoClass">
    </div>
  </navTop>

对应的回调 分别跳转到 不同的位置

  methods:{
    GoHome(){
      this.$router.push('/home')
    },
    GoSearch(){
      this.$router.push('/search')
    },
    GoClass(){
      this.$router.push('/class')
    }
}

Swiper 轮播组件

首先要安装 对应的依赖包

npm i swiper@4.5.1

npm i vue-awesome-swiper@3.1.3

创建对应的组件:

swiper 的相关配置 v-swiper:mySwiper 绑定到下方 swiperOption当中

轮播图的数据 由外部 组件 props 传进来

图片加载完成后 @onload 发射自定义事件 通知首页 计算图片加载完成后的首页页面长度

<template>
  <div v-swiper:mySwiper="swiperOption" v-if="csbanner.length">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="banner in csbanner">
        <img :src="banner" @load="homeswiperload()">
      </div>
    </div>
    <div class="swiper-pagination swiper-pagination-bullets"></div>
  </div>
</template>


<script>
  export default {
    name: "swiper",
    props:{
      csbanner:{
        type:Array,
        default(){
          return[]
        }
      }
    },
    data(){
      return{
        swiperOption:{
          spaceBetween: 0,
          autoplay: {
            delay: 3000,
            disableOnInteraction: false,
          },
          pagination: {
            el: '.swiper-pagination',
            clickable: true,
          },
          speed:700,//切换速度
          loop:true//前后循环
        },
        isload:false,
      }
    },
    methods:{
      homeswiperload(){
        if(!this.isload){
          console.log('首页swiper轮播图加载完成');
          this.$emit('homeswiperload')
          this.isload = true
        }
      }
    }
  }
</script>

<style scoped>
  .swiper-pagination{
    width: 100%;
    bottom: 10px;
  }
</style>

 plugin/swiper.js

在这里编辑相关配置  挂载到nuxt.confin.js 的 plugin模块当中

这样写 还有一个作用就是 在ssr渲染中 没有全局this 导致 swiper的相关报错

import Vue from 'vue'
if (process.browser) {
  const VueAwesomeSwiper = require("vue-awesome-swiper/dist/ssr");
  Vue.use(VueAwesomeSwiper);
}

在首页 引入及使用 

import homeSwiper from '../components/common/swiper/swiper'
components:{
  homeSwiper,
},
<homeSwiper  :csbanner="homeData.bannerData" class="swiper"></homeSwiper>

homeIcon 和 homeRecommend 都是基础布局+数据渲染 没什么难度

<homeIcon :cicons="homeData.icons"></homeIcon>

<homeRecommend :caws="homeData.aws" :chotclass="homeData.hotclass"></homeRecommend>

 主要就是网络请求相关的 流程 梳理一下:

在nuxt.js 中 asyncData 属于一个生命周期 在此生命周期中请求数据  返回数据不用再赋值到组件的data 中 课直接供模板使用

  async asyncData({$axios}){
    const {data} = await $axios.get('http://www.wsg3096.com/ass/home-data.txt')
    return {homeData:data}
  },

homeIcon

<template>
  <div class="homeicon">
    <div v-for="n in cicons">
      <a :href="n.url">
        <img :src="n.img" alt="">
        <div>{{n.title}}</div>
      </a>
    </div>
  </div>
</template>

<script>

  export default {
    name: "Home-icon",
    props:{
      cicons:{
        type:Array,
        default(){
          return[]
        }
      }
    }
  }
</script>

<style scoped>
  .homeicon{
    display: flex;
    justify-items: center;
    text-align: center;
    padding: 10px 0px;
    background: #fff;
    box-shadow: 1px 8px 8px rgba(155,155,155,0);
  }

  .homeicon img{
    width: 48px
  }

  .homeicon div{
    width: 100%;
    text-align: center;
    cursor: pointer;
    font-size: 14px}
</style>

homeRecommend

<template>
  <div class="recommend">
    <div class="tuijian-bt">
      {{caws.boxBy1}}
      <a href="https://m.zhongxin5.cn/Live/Index?classId=0&teacherId=0&isback=2" target="_blank">
        <span>更多&gt;</span>
      </a>
    </div>
    <div class="tuijian" v-for="w in chotclass.slice(0,4)">
      <a :href="w.link">
        <img :src="w.img" alt="">
        <div class="right">
          <span class="tuijian-name">{{caws.erjian}} - {{w.tit2}}<br>{{w.tit3}}</span>
          <span class="tuijian-price">
          <i>¥</i>{{w.price}}<i class="line-c">¥{{w.lastprice}}</i>
        </span>
        </div>
      </a>
      <div class="clear-fix"></div>
    </div>
  </div>
</template>

<script>

  export default {
    name: "Home-recommend",
    props:{
      caws:{
        type:Object,
        default() {
          return {}
        }
      },
      chotclass:{
        type:Array,
        default() {
          return []
        }
      }
    },
    methods:{

    }
  }
</script>

<style scoped>
  .tuijian{
    padding:  12px 10px;
    background: #fff;
    margin: 0px 16px;
    border-bottom: 1px solid #f8e8e8;
  }

  .tuijian-bt{
    font-size: 20px;
    font-weight: bold;
    line-height: 3;
    margin: 0px 18px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    color: #f35;
  }

  .tuijian-bt span{
    font-size: 15px;
    font-weight: 400;
    color: #666;
  }


  .tuijian img{
    width: 45%;
    float: left;
    border-radius: 10px;
  }

  .tuijian-price i{
    font-style: normal;
    font-size: 16px;
    font-weight: 400;
  }

  .tuijian-price{
    font-size: 20px;
    font-weight: 600;
    color: #fc3f1d;
    margin-top: 8px;
  }

  .right{
    width: 55%;
    padding-left: 8px;
  }

  .tuijian-name{
    font-size: 16px;
    line-height: 1.6;
    white-space: nowrap;
  }

  .line-c{
    text-decoration: line-through;
    margin-left: 8px;
    color: #666;
  }

  .right span{
    display: block;
  }

</style>

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

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

相关文章

Spring5入门到实战------10、操作术语解释--Aspectj注解开发实例。AOP切面编程的实际应用

1、操作术语 1.1、连接点 类里面哪些方法可以被增强、这些方法被称为连接点。比如&#xff1a;用户控制层有登录、注册、修改密码、修改信息等方法。假如只有登录类和注册类可以被增强&#xff0c;登录和注册方法就称为连接点 1.2、切入点 实际被真正增强的方法&#xff0c…

C++ 【UVA488】Triangle Wave

&#x1f4cb; 个人简介 &#x1f496;大家好&#xff0c;我是2022年3月份新人榜排名第三的 ༺Blog༒Hacker༻ &#x1f389;支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4ac;格言&#xff1a;༺永做优质༒programmer༻ &#x1f4e3; 系列专栏&am…

Unity技术手册-编辑器基础入门万字大总结

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 本文约8千字&#xff0c;新手阅读需要20分钟&#xff0c;复习需要12分钟 【收藏随时查阅不再迷路】 &#x1f449;关于作者 众所周知&…

【C/C++】程序环境,探索程序的执行过程(习得无上内功《易筋经》的第一步)

目录1.程序的翻译环境和执行环境2.详解编译链接2.1翻译环境2.2编译本身也分为几个阶段预编译&#xff08;预处理&#xff09;编译汇编详解符号表形成符号表2.3.链接合并段表符号表的合并和重定位3.运行环境总结&#xff1a;1.程序的翻译环境和执行环境 在ANSIC&#xff08;标准…

LeetCode每日一题——1235. 规划兼职工作

LeetCode每日一题系列 题目&#xff1a;1235. 规划兼职工作 难度&#xff1a;困难 文章目录LeetCode每日一题系列题目示例思路题解题目 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作&#xff0c;每份工作预计从 startTime[i] 开始到 endTime[i] 结束&a…

1024程序员节|基于Springboot实现爱心捐赠管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号&#xff1a;BS-XX-…

Mybatis-plus学习(基于版本3.0.5)

文章目录一.概念1.1 简介1.2 特性二.快速入门三.CRUD扩展3.1 Insert插入3.2 主键生成策略3.3 Update更新3.4 自动填充3.5 乐观锁3.6 查询操作3.7 删除操作3.8 性能分析插件&#xff08;新版本的Mybatis-plus已将此插件移除&#xff09;3.9 条件构造器3.10 代码生成器一.概念 1…

Transformer合集3

太多了 我都累了 这都第4了 这次先是关于他的小样本目标检测 , 用很少的训练示例检测新目标 小样本目标检测 论文地址&#xff1a; https://openaccess.thecvf.com/content/CVPR2022/papers/Han_Few-Shot_Object_Detection_With_Fully_Cross-Transformer_CVPR_2022_paper.…

docker安装influxdb及备份恢复

influxdb安装influxdb1&#xff0c;拉取镜像2&#xff0c;创建目录并进入到目录内3&#xff0c;创建influxdb容器服务4&#xff0c;访问&#xff1a;ip8086备份恢复influxdb数据准备1.1 创建用户&#xff0c;填入组织&#xff0c;桶信息1.2&#xff0c;给桶添加点数据1&#xf…

ansible部署lnmp架构

环境准备&#xff1a; 主机名IP服务系统ansible192.168.160.131ansibleCentOS-8.5nginx192.168.160.132nginxCentOS-8.5mysql192.168.160.137mysqlCentOS-8.5php192.168.160.139phpCentOS-8.5 1、生成私钥&#xff0c;对另外三台主机进行免密登入 [rootansible ~]# ssh-keyge…

【单片机毕业设计】【mcuclub-jj-007】基于单片机的门铃的设计

最近设计了一个项目基于单片机的门铃&#xff0c;与大家分享一下&#xff1a; 一、基本介绍 项目名&#xff1a;门铃 项目编号&#xff1a;mcuclub-jj-007 单片机类型&#xff1a;STC89C52、STM32F103C8T6 具体功能&#xff1a; 1、通过人体热释电检测是否有人&#xff0c;当…

Java --- 创建SpringMVC项目

目录 一、什么是MVC 二、什么是SpringMVC 三、SpringMVC的特点 四、创建SpringMVC项目 4.1、开发环境 4.2、创建maven工程 4.3、配置web.xml文件 4.4、创建请求控制器 4.5、配置springMVC.xml文件 4.5、访问首页面 4.6、访问指定页面 一、什么是MVC MVC是一种软件架…

C++:C++的IO流

while (scanf("%s", buff) ! EOF)如何终止&#xff1f; 答&#xff1a;ctrl z换行 是规定&#xff0c;ctrl c 是发送信号杀死进程&#xff08;一般不建议ctrl c&#xff09;。 int main() {string str;while (cin >> str) // operator>>(cin, str){cou…

K_A01_001 基于单片机驱动WS2812 点灯流水灯 0-9显示

目录 一、资源说明 二、基本参数 三、通信协议说明 WS2812时序: 代码: 四、部分代码说明 1、接线说明 2、主函数 五、相关资料链接 六、数字提取格式 七、视频效果展示与资料获取 八、项目所有材料清单 九、注意事项 十、接线表格 一、资源说明 单片机型号 测试条件 模…

【一起学习数据结构与算法】优先级队列(堆)

目录一、什么是优先级队列&#xff1f;二、堆 (heap&#xff0c;基于二叉树)2.1 什么是堆&#xff1f;2.2 堆的分类2.3 结构与存储三、堆的操作3.1 堆创建3.2 插入元素3.3 弹出元素四、用堆模拟实现优先级队列五、堆的一个重要应用-堆排序六、经典的TOPK问题6.1 排序6.2 堆一、…

如何用两个晚上教女生学会Python

文章目录安装、需求引导和开发模型命令行计算器用温度指导穿衣VS Code 和女孩子的衣柜用遍历来挑选衣物交互课后作业事情的起因是这样的&#xff0c;知乎上有个妹纸加我&#xff0c;说要相亲。尽管我欣喜若狂&#xff0c;但恰巧在外出差&#xff0c;根本走不开。妹纸于是说要不…

自动化和半自动矢量化提取地物矢量轮廓

假期愉快&#xff08;这个假期加班了没&#xff1f;图片&#xff09;&#xff01;今天小助手来分享关于自动化和半自动化的矢量提取&#xff0c;使用的软件都是我们常用的软件。一是使用Global Mapper对遥感影像或矢量底图进行自动提取&#xff0c;二是基于天地图矢量底图使用A…

阶段性总结 | C语言

… &#x1f333;&#x1f332;&#x1f331;本文已收录至&#xff1a;技术之外的往事 更多知识尽在此专栏中&#xff01; &#x1f389;&#x1f389;&#x1f389;欢迎点赞、收藏、关注 &#x1f389;&#x1f389;&#x1f389;回顾过去 各位CSND的小伙伴们大家好&#xf…

C · 进阶 | 慎看!深剖文件操作,怕你停不下

啊我摔倒了..有没有人扶我起来学习.... 目录前言一、 什么是文件1.1 程序文件1.2 数据文件1.3 文件名二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭三、文件的顺序读写3.0 有必要解释一下*3.1 fputc3.2 fgetc3.3 fprintf3.4 fscanf3.4.1来个小总结&#xff08;这里忽略…

双非本23秋招之路-从考研跑路到某安全大厂(无实习、项目)

文章目录双非本23秋招之路-从考研跑路到某安全大厂&#xff08;无实习、项目&#xff09;一、自我介绍二、简历准备三、刷题四、八股文五、项目方面六、关于实习七、面试方面八、秋招路程九、简历投递十、面经分享双非本23秋招之路-从考研跑路到某安全大厂&#xff08;无实习、…