Vue2组件化开发(路由与分页组件化)

news2024/11/26 0:25:48

组件化开发

组件化开发就是将一个页面拆分为多个不同的组件,每个组件依赖的Css,js,资源等放到一起进行开发,组件与组件之间可以进行嵌套,在组件化中,vue只有一个html文件,所有的组件都挂载在该文件上,这种单页面的应用使得维护与开发更为简单。

在组件化开发之前我们需要对 vue-cli 和 webpack(静态模块打包工具) 进行全局安装

npm install -g @vue/cli
npm install -g webpack

Vue CLI 致力于将 Vue 生态中的工具基础标准化。它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性,无需 eject。

路由(Router)

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。功能包括:

  • 嵌套路由映射
  • 动态路由选择
  • 模块化、基于组件的路由配置
  • 路由参数、查询、通配符
  • 展示由 Vue.js 的过渡系统提供的过渡效果
  • 细致的导航控制
  • 自动激活 CSS 类的链接
  • HTML5 history 模式或 hash 模式
  • 可定制的滚动行为
  • URL 的正确编码

基本使用(路由配置)

路由安装: 

npm install vue-router@对应版本

一般是在通过脚手架创建vue项目时选择了router 让脚手架替我们创建与vue版本与之对应得路由版本

用 Vue + Vue Router 创建单页应用非常简单:通过 Vue.js,我们已经用组件组成了我们的应用。当加入 Vue Router 时,我们需要做的就是将我们的组件映射到路由上,让 Vue Router 知道在哪里渲染它们。

两种不同的引入方式区别:

                如上图的 HomeView的引入方式代表了无论是否使用都会进行加载,相当于java中的饥饿模式

                而另外一种相当于 java 中的懒汉模式,只有在使用的时候才会进行引入加载

静态路由

下面的案例为一个开启了路由模式的侧边导航栏

        导航栏开启了路由模式(:router="true")后 index="的值会被当做路由的路径进行跳转显示"

动态路由

介绍取自 带参数的动态路由匹配 | Vue Router (vuejs.org)

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数 。

路径参数 用冒号 : 表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 this.$route.params 的形式暴露出来。

你可以在同一个路由中设置有多个 路径参数,它们会映射到 $route.params 上的相应字段

带参跳转

params:

        传参类似 post

        路由配置 path: "/home/:id" 或者 path: "/home:id"刷新页面id会保留

        不配置path ,第一次可请求,刷新页面id会消失

query:

        传参类似get,路径后会显示参数

        路由可不配置

html取参 $router.params/query.id

script取参 this.$router.params/query.id

响应拦截器

在main.js全局配置文件中我们对响应拦截器进行配置

响应拦截器会将我们对后端进行请求后,后端的数据返回会先经过响应拦截器

在下图中,我们对axios 进行了全局的配置使用,并在响应拦截器中对后端的数据进行了判断即返回的数据简化 

请求拦截器

对前端发请求前要对发送的请求做什么,可以添加自定义请求头等

this.$router.push
跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面

this.$router.replace
跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)

this.$router.go(n)
向前或者向后跳转n个页面,n可为正整数或负整数

路由守卫

常用在前后端分离项目中用于前端的登录拦截

To : 目的地
From: 当前的信息
Next : 函数  ({path:’/login’})
Next({path:to.path}) : 默认包含了你的目的地的地址

组件化分页

在传统的项目中,我们对于分页的开发,如果大量的页面需要分页,呢每个页面都要有分页的代码,会造成大量的重复代码,而在组件化开发中,我们只需要对分页进行一次的组件化配置,就可以方便的对这部分重复的代码进行复用。

但是在组件化中,我们需要父子组件之间互相传值才能实现分页的可利用。

<template>
  <div>
    <el-table
        :data="filmList.list"
        border
        style="width: 100%"
    >
      <el-table-column
          prop="filmId"
          label="电影编号"
          width="180">
      </el-table-column>
      <el-table-column
          prop="filmName"
          label="电影名字">
      </el-table-column>
      <el-table-column
          prop="type.typeName"
          label="电影类型">
      </el-table-column>
      <el-table-column
          prop="filmDuration"
          label="电影时长">
      </el-table-column>
      <el-table-column
          prop="filmDate"
          label="上映日期">
      </el-table-column>
      <el-table-column
          prop="filmRemark"
          label="备注">
      </el-table-column>
    </el-table>
    <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="this.pageNum"
        :page-sizes="[3, 5, 7, 9]"
        :page-size="this.pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="this.filmList.total">
    </el-pagination>
  </div>
</template>

<script>
export default {
  name: "FileMsg",
  data () {
    return {
      filmList: [],
      pageNum: 1,
      pageSize: 3,
    }
  },
  methods: {
    async init(p,s) {
      this.filmList = await this.$axios.get(`/info/page?pageNum=${p}&pageSize=${s}`);
    },
    handleSizeChange(val) {
      if (val !== undefined) {
        this.pageSize = val;
      }
      this.init(this.pageNum, this.pageSize)
    },
    handleCurrentChange(val) {
      this.pageNum = val;
      this.init(this.pageNum, this.pageSize)
    },
  },
  created() {
    this.handleSizeChange();
  }
}
</script>

<style scoped>

</style>

父子组件(分页组件)

父子组件将会通过分页进行演示。

这里将对父子组件简单进行文字的讲解后通过代码进行分页的父子传值组件化演示

        首先我们需要 component 定义对组件进行全局 或者 局部  导入的定义

        组件的定义名字 只能使用 大小驼峰定义法

        然后我们用使用html标签的方式在要使用的组件进行使用即可

        父 -> 子  子通过 prop: [] 来接收

        子 -> 父  子需要使用 $emit 的形式通过方法函数向父组件传值

这里简单了解有一定概念即可,下面看相关代码演示:

分页使用的比较多,所以这里我们对分页的组件进行全局引用

main.js 全局配置文件

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

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

相关文章

RabbitMQ 消息对象 序列化/反序列化 天坑!异常处理方案

目录 1. 报错的背景 2. 问题分析 3. 最佳解决办法 1. 报错的背景 a&#xff09;使用 RabbitMQ 发送消息时&#xff0c;发送消息的类型为 Map<String, Object>&#xff0c;map 里面我 put 了一个 <String, Long> 类型&#xff0c;如下图&#xff1a; b&#xff…

带你人工识别C#开源库BarcodeLib生成的一维码Code128

我们是做HIS系统开发的&#xff0c;前段时间发现某些处方的一维码出现无法识别的情况。看了一下一维码生成的逻辑&#xff0c;使用到了BarcodeLib库&#xff0c;经过反复确认&#xff0c;我们程序是没有问题的。后面不得不反编译看一下BarcodeLib生成一维码的逻辑。最后调整一维…

Techwalk攻略 | 来北京与OpenHarmony技术大会一起技术漫游!

去北京Citywalk已经不是新鲜事&#xff1f; 不如来第二届OpenHarmony技术大会一起Techwalk&#xff01; 大会即将开幕请速速收藏以下打卡攻略↓ 点击链接&#xff0c;观看线上直播

【从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程】

你是否曾读过一本让你欲罢不能的计算机书籍&#xff1f;它可能为你打开了新的技术世界大门&#xff0c;或者是帮助你解决了棘手的编程难题。 前言&#xff1a; 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了金融、商业、…

服务器搭建:从零开始创建自己的Spring Boot应用【含登录、注册功能】

当然&#xff0c;你可以先按照IDEA搭建SSM框架【配置类、新手向】完成基础框架的搭建 步骤 1&#xff1a;设计并实现服务器端的用户数据库 在这个示例中&#xff0c;我们将使用MySQL数据库。首先&#xff0c;你需要安装MySQL并创建一个数据库以存储用户信息。以下是一些基本步…

分布式事务解决方案之Atomikos

这种方式只适用于 对于真正分布式应用不适用,原因在于 Atomikos需要获得所有数据源 统一进行事务管理 JTA(Java Transaction API)被称为Java事务API,是由Java语言提供的一套解决分布式事务的API标准 XA协议 1 2 31. XA协议是JTA的基础 2. XA协议最早由Tuxedo首先提出,并交给…

ChatGPT、Llama-2等大模型,能推算出你的隐私数据!

ChatGPT等大语言模型的推理能力有多强大&#xff1f;通过你发过的帖子或部分隐私数据&#xff0c;就能推算出你的住址、年龄、性别、职业、收入等隐私数据。 瑞士联邦理工学院通过搜集并手工标注了包含520个Reddit&#xff08;知名论坛&#xff09;用户的个人资料真实数据集Pe…

MySQL导入数据库报错Error Code: 2006

Error Code: 2006 - MySQL server has gone away 因为导入的某张表数据过大导致导入中途失败 , 修改max_allowed_packet 即可解决。 SET GLOBAL max_allowed_packet 1024*1024*200;

Pytest UI自动化测试实战实例

环境准备 序号库/插件/工具安装命令1确保您已经安装了python3.x2配置python3pycharmselenium2开发环境3安装pytest库pip install pytest4安装pytest -html 报告插件pip install pytest-html5安装pypiwin32库(用来模拟按键)pip install pypiwin326安装openpyxl解析excel文件库p…

享受户外的美好时光:花园吊椅的魅力

拥有舒适的花园吊椅&#xff0c;就像在家中创造了一个度假天堂。这些轻松摇摆的座位为您提供了一个完美的地方&#xff0c;既能舒适躺卧&#xff0c;又能让您在家中的花园或庭院中感受到度假的氛围。度过美好时光的吊椅&#xff0c;将成为家庭花园的一大亮点&#xff0c;为您带…

Python某建筑平台数据, 实现网站JS逆向解密

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: 首先我们先来安装一下写代码的软件&#xff08;对没安装的小白说&#xff09; Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 模块…

学生成绩管理神器

在信息化时代&#xff0c;你是否还在为处理大量的学生成绩数据而烦恼&#xff1f;是否还在用传统的方式&#xff0c;手动输入和整理成绩信息&#xff1f;今天&#xff0c;我将向你展示如何利用各种代码和Excel&#xff0c;打造一个学生自助查询成绩的神器&#xff0c;让数据管理…

ClickHouse 学习之基础入门(一)

第 1 章 ClickHouse 入 门 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用 C 语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用 SQL 查询实时生成分析数据报告。 …

词典查询工具django-mdict

什么是 django-mdict &#xff1f; django-mdict 不是词典软件&#xff0c;是词典查询的脚本工具&#xff0c;主要目的是解决词典数量多&#xff0c;手机容量不足的问题&#xff0c;是对其他词典软件局域网在线查询功能的补充&#xff0c;是用 django 实现的 mdict 词典查询工具…

递归与快速算法

借鉴&#xff1a; 4分钟彻底掌握递归算法、斐波那契数列、快速排序&#xff0c;不再怕面试&#xff01;_哔哩哔哩_bilibili 可直接观看借鉴里的视频 快速算法

vcruntime140.dll在哪下载?vcruntime140.dll文件说明及其下载方法

vcruntime140.dll在哪下载&#xff1f;为啥还有这样的问题&#xff1f;其实就是你电脑的vcruntime140.dll文件丢失了&#xff0c;你需要重新去下载一个vcruntime140.dll文件&#xff0c;这时候你就会想这个东西到底要去哪里下载&#xff0c;今天我们就来给大家详细的解析一下&a…

AI视频 | Runway的史诗级更新真的那么震撼吗?来看我的试用体验!

就在昨天&#xff0c;Runway&#xff0c;这个生成式AI的领头羊&#xff0c;正式在X上发布了他们史诗级更新 看下视频 【视频2】 这个确实看起来太棒了 注册个账号&#xff0c;看下效果咋样 地址百度哈&#xff0c;注册登录也比较方便 直接邮箱即可 不过我是直接google账号登录的…

从使用的角度看 ByConity 和 ClickHouse 的差异

自 ClickHouse Inc 宣布其重要新功能仅在 ClickHouse Cloud 上开放以来&#xff0c;一些关注 ByConity 开源的社区小伙伴也来询问 ByConity 后续开源规划。为回答社区疑问&#xff0c;我们将之前分享的关于 ByConity 与 ClickHouse 相关功能对比的 webinar 整理为文章&#xff…

MinIO多容器配置NGINX代理实践(docker-compose版本)

以下nginx配置 分别将本机的9001端口代理到minio1,minio2,minio3,minio4主机的9001端口。用于minio后台 分别将本机的9000端口代理到minio1,minio2,minio3,minio4主机的9000端口。用于minioApi events {worker_connections 1024; }http {upstream minio_console {server min…