vue-router全部搞定(附源码)

news2024/12/25 10:36:28

源码下载链接(先转存,后下载)https://pan.quark.cn/s/b0c6edd68c21

怎么用vue-cli搭建项目

我们固然可以用传统html+js的方式来搭建vue项目,但是如果组件很多,就需要通过Vue.component的方式一个个去引入,很麻烦。 我们可以用脚手架来创建vue-cli项目。

1)安装vue-cli脚手架

npm install -g @vue/cli

2)项目初始化

vue create hello-world

image.png

选择vue的版本,用Vue2

image.png

开始创建了

image.png

创建完毕了

image.png

根据提示启动项目,监听在8080端口。

image.png

vue-router

为什么要用vue-router?以上个项目为例,主应用文件是App.vue

image.png

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
  import HelloWorld from './components/HelloWorld.vue'

  export default {
    name: 'App',
    components: {
      HelloWorld
    }
  }
</script>

我们看到引入了一个HelloWorld组件,如果我们想看其他页面怎么办?因为是单页SPA应用,不好意思,目前你还真就没有办法。 对于一个vue.js应用,其实就只有一个App.vue组件能看到,如果你想看其他页面,就必须通过vue-router。 vue-router解决了路由和组件的对应关系问题,路由你可以理解为网页的url,不同的url对应的不同的路由,然后通过路由我们能找到不同的页面。

1)安装vue-router
npm i -S vue-router

-S 代表要加入到项目的依赖,因为我们在运行项目的时候就要用到vue-router,所以要加上。

image.png

这里有个坑,默认下载的vue-router是最新的,而我们是vue2.0的项目,版本不匹配。会报这个错误:

image.png

这个时候你首先应该卸载原有的vue-router版本,安装对应的版本,卸载命令如下:

npm uninstall vue-router

卸载完成之后,安装对应版本,安装你想安装的版本时在vue-router后面加@对应的版本号,安装命令如下:

npm install vue-router@3.5.2

image.png

最后,重新安装后,要重启服务!

2)使用vue-router插件

image.png

image.png

3)初始化Route
import AComponent from './components/A'
import BComponent from "./components/B";

//初始化路由(参数是数组)
const routes = [
  {path:'/a',component:AComponent},
  {path:'/b',component:BComponent}
];
const router = new Route({
  routes,
  mode:'hash' //默认hash模式,会有#
});

new Vue({
  render: h => h(App),
  router, // 路由要作为参数传入根 Vue实例
}).$mount('#app')

引入组件的时候,可以用@代替/src目录,这属于别名。 所以我们也可以写成这样:

import AComponent from '@/components/A'
import BComponent from "@/components/B";

当我们用代码提示引入AB组件的时候,默认就是这种。

A组件:

<template>
  <h1>A</h1>
</template>

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

B组件:

<template>
  <h1>B</h1>
</template>

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

最后,在App.vue上添加

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <router-view />
  </div>
</template>

我们在浏览器输入http://localhost:8080/#/a 就可以访问A组件,B组件同理。

image.png

但是很显然,我们只有手动改变url去访问不同的页面,这是不合适的,改用router-link

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <ul>
      <li style="list-style: none">
        <router-link to="/a">A页面</router-link>
      </li>
      <li style="list-style: none">
        <router-link to="/b">B页面</router-link>
      </li>
    </ul>
    <router-view />
  </div>
</template>

这个用法就类似于a标签

image.png

router嵌套和重定向

嵌套就是一个路由加一个children属性,里面又有其他路由,然后夫路由的页面也要加上,否则就是给静态的,看不到子路由。注意,子路由的path不要加 / ,否则还是全路径的,嵌套了个寂寞啊。

const routes = [
  {
    path:'/a',
    component:AComponent,
    children: [
      {path:'aa',component:AA}
    ]
  },
  {path:'/b',component:BComponent}
];

a页面,加动态路由

<template>
  <div>
    <h1>A</h1>
    <router-view />
  </div>
  
</template>

地址栏访问:http://localhost:8080/#/a/aa

image.png

成功,再来说说重定向,a在实际开发中,很可能是左侧菜单栏,所以我们应该要再配置一个默认的首页,当你打开A页面,A页面里面的动态路由应该显示默认的首页,而不是空白一片。

const routes = [
  {
    path:'/a',
    component:AComponent,
    redirect:'/a/aa', //这里要写全路径
    children: [
      {path:'aa',component:AA}
    ]
  },
  {path:'/b',component:BComponent}
];

路由参数

有时候,我们希望采用restful的路由风格,跳转路由的时候携带参数,可以这样做。

const routes = [
  {
    path:'/a',
    component:AComponent,
    redirect:'/a/aa', //这里要写全路径
    children: [
      {path:'aa',component:AA},
      {path:':id',component:AA}, //这样携带参数,相当于/a/:id
    ]
  },
  {path:'/b',component:BComponent}
];

然后在AA组件中这样去接收

<template>
  <h1>
    AA
    <div>{{$route.params.id}}</div>
  </h1>
</template>

当我们访问http://localhost:8080/#/a/111

image.png

这样就拿到参数了,注意这种参数路由的优先级比普通路由低,也就是如果你输入/a/aa,会优先匹配普通路由,而不是这个。

编程式路由

其实更多的时候,我们希望手动用js跳转路由,并携带参数,就要用到编程式路由了。 在B组件,我们做页面跳转。

<template>
  <h1>
    B
    <button @click="gotoA">跳转到A页面</button>
  </h1>
</template>

<script>
export default {
  name: "BComponent",
  methods: {
    gotoA(){
      this.$router.push({
        path:'/a/aa',
        query:{
          name:'keke'
        }
      });
    }
  }
}
</script>

然后AA组件这样去接收参数

<div>{{$route.query.name}}</div>

最终效果:

image.png

image.png

以上所有的路由跳转,都会在history进行缓存,即可以通过浏览器的回退按钮,退回到上一步。

image.png

如果你不想回退,就不要用push,改成replace。 如果你想用js回退,就用 this.$router.go(-1)

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

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

相关文章

flask实现抽奖程序(一)

后端代码E:\LearningProject\lottery\app.py from flask import Flask, render_template import randomapp Flask(__name__)employees [赵一, 钱二, 孙三, 李四, 周五, 吴六, 郑七, 王八]app.route(/) def hello_world():return render_template(index.html, employeesemplo…

14.《C语言》——【牛客网BC116—BC123题目讲解】

亲爱的读者&#xff0c;大家好&#xff01;我是一名正在学习编程的高校生。在这个博客里&#xff0c;我将和大家一起探讨编程技巧、分享实用工具&#xff0c;并交流学习心得。希望通过我的博客&#xff0c;你能学到有用的知识&#xff0c;提高自己的技能&#xff0c;成为一名优…

【语音告警】Zabbix语音播报-报警媒介部分配置-语音报警灯|声光报警器|网络信号灯

阅读说明 本文为博灵语音通知终端与Zabbix报警媒介的配置&#xff0c;对接完成后可以实现Zabbix的声光语音告警&#xff0c;播报效果可以参考 Modbus-博灵语音通知终端与PLC联动告警介绍 对接前需配置好通知终端的IP地址&#xff0c;设备参数参见 其他完整的Zabbix语音播报报…

重邮计算机网络803-(2)物理层

一.物理层 1.介绍 物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;即&#xff1a; ①机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 ②电气特性 指明在接口电缆的各条线上出现的电压的范围。 ③功能特性 指明某条线上…

Long-Context LLM综述

目录 前言1. Preliminary2. 方法分类3. 长度外推3.1 位置外推和插值位置外推插值 3.2 上下文窗口分割与滑动3.3 提示压缩 4. 注意力近似4.1 低秩分解4.2 稀疏注意力4.3 Softmax-free Attention 5. Attention-free Transformers5.1 状态空间模型(State Space Model, SSM)5.2 位置…

Redis实战——创建账户及连接数据库

一、创建一个新账户 要创建一个带有免费数据库的新账户&#xff0c;请按照以下步骤操作&#xff1a; 前往 Redis Cloud 的注册页面。有两种开始使用 Redis Cloud 的选项&#xff1a; 在表单中输入您的信息&#xff0c;然后选择“Get Started”&#xff08;开始使用&#xff…

PR如何让音频淡入淡出

PR如何让音频淡入淡出 方法一&#xff1a;效果控件关键帧方法二&#xff1a;音频轨道关键帧 以淡入为例&#xff0c;介绍如何设置淡入的两种方法&#xff0c;推荐使用第二种。淡出效果类似。 方法一&#xff1a;效果控件关键帧 选中音频&#xff0c;点击效果控件 在淡入结束的…

差动放大器

差动器的出现是为了解决直接耦合电路存在的零点漂移问题&#xff0c;另外&#xff0c;差动放大器还有灵活的输入&#xff0c;输出方式。 一&#xff0c;基本差动放大器 差动放大器在电路结构上具有对称性&#xff0c;三极管VT1&#xff0c;VT2同型号&#xff0c;R1R2,R3R4,R5…

Web学习_SQL注入_布尔盲注

盲注就是在SQL注入过程中&#xff0c;SQL语句执行后&#xff0c;查询到的数据不能 回显到前端页面。此时&#xff0c;我们需要利用一些方法进行判断或者尝 试&#xff0c;这个过程称之为盲注。而布尔盲注就是SQL语句执行后&#xff0c;页面 不返回具体数据&#xff0c;数据库只…

SQL(一)基本语法

文章目录 一、Sql 语言基本特点二、数据查询&#xff08;按执行顺序排列&#xff09;1. From & Join2. Where3. Group by4. Having5. Select6. Distinct7. Order by8. Limit/ Offset 三、功能公式1. 字符处理2. 时间处理3. 统计计算 一、Sql 语言基本特点 不区分大小写分号…

平面设计神器CorelDRAW2021精简版,你值得拥有!

亲爱的设计师小伙伴们&#xff0c;今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版&#xff01;&#x1f929;✨作为一名专业的图形设计师&#xff0c;我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星&#xff01;&#…

新技术前沿-2024-构建个人知识库和小语言模型

OllamaWebUIAnythingLLM&#xff0c;构建安全可靠的个人/企业知识库 1 技术路线一 1.1 搭建本地大模型Ollama 1.2 搭建用户界面open WebUI 使用Docker Desktop Open-webui。它可以快速基于Ollama构筑本地UI。 如果没有科学上网&#xff0c;很可能会拉不动&#xff0c;可以试…

牛客热题:不同的路径数目(一)

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;不同的路径数目(一)题目链接方法…

1909java内部知识管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java内部知识管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开 发环境为TOMCAT7.0,Myeclipse8.5开发&…

二分#背包#快排#LCS详解

二分#背包#快排#LCS详解 文章目录 二分#背包#快排#LCS详解1. 二分搜索2. 01背包问题3. 快速排序4. 最长公共子序列 1. 二分搜索 在处理大规模数据集时&#xff0c;查找操作的效率显得尤为重要。二分搜索是一种在有序数组中查找目标值的高效算法&#xff0c;其时间复杂度为O(lo…

Leetcode 力扣113. 路径总和 II (抖音号:708231408)

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

KUKA机器人中断编程详细教程1—了解中断

在公众号查看更多内容。 在KUKA机器人编程与调试中&#xff0c;经常会用到中断编程。通过中断实现机器人暂停&#xff0c;或者停止当前的动作进入中断后的程序中接着运行&#xff0c;以此来满足实际的调试要求。 1、中断的概念 ①当出现诸如输入等定义的事件时&#xff0c;…

Android APP memory统计方法

目录 进程的内存信息概述 关键的术语 测试步骤 测试步骤 数据处理 数据分析&#xff1a; 进程内存信息 Dumpsys meminfo -a PID Procrank Procmem PID 特殊内存信息 Mali ION(multi-media&#xff0c;gralloc) 进程地址空间信息 /proc/pid/smaps Showmap PID …

Cinema 4D 2024 软件安装教程、附安装包下载

Cinema 4D 2024 Cinema 4D&#xff08;C4D&#xff09;是一款由Maxon开发的三维建模、动画和渲染软件&#xff0c;广泛用于电影制作、广告、游戏开发、视觉效果等领域。Cinema 4D允许用户创建复杂的三维模型&#xff0c;包括角色、场景、物体等。它提供了多种建模工具&#x…

redis 05 复制 ,哨兵

01.redis的复制功能&#xff0c;使用命令slaveof 2. 2.1 2.2 3. 3.1 3.1.1 3.1.2 3.1.3 4 4.1 4.2 例子 5.1 这里是从客户端发出的指令 5.2 套接字就是socket 这里是和redis事件相关的知识 5.3 ping一下