当前位置: 首页 > news >正文

Vue2 学习记录--路由

一、基础

1.1、起步

路由相关的文件 main.js、index.js 的相关分析。

main.js:

import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')

首先是import,router是官方实现的组件。

其次在new Vue中,和渲染层方法同级别。

再次,为了代码简洁,将路由的实现放到index.js中去实现。

index.js:

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},]const router = new VueRouter({routes
})export default router

理解:

1、输出的router,是VueRouter类型的实例,VueRouter是官方管理的。

2、使用时:Vue.use(VueRouter),然后配置routes 数组。

3、数组元素,path是在url的表现;name是命名路由元素;component 则指明组件物理文件的存储路径。

最后,简单的路由导航实现,三步走起:

step1 创建页面

参考语法部分的创建页面:Vue2 学习记录--语法部分, 代码略。

step2 配置路由

touter目录的index.js中,配置路由数组routes。代码示例:

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')},{path: '/deviceGroup',name: 'deviceGroup ',component: () => import(/* webpackChunkName: "test" */ '../views/DeviceGroupView.vue')},{path: '/test',name: 'test ',component: () => import(/* webpackChunkName: "test" */ '../views/TestView.vue')}
]const router = new VueRouter({routes
})export default router

step3 页面中使用路由

......<router-link to="/">Home</router-link> |<router-link to="/deviceGroup">设备分组</router-link>|<router-link to="/test">测试页面</router-link>|<router-link to="/about">About</router-link>   
......

三步走后的输出如下图所示。

1.2、动态路由匹配(url中传子路径参数 更合理)

step1 配置路径

......
path: '/deviceGroup/:deviceGroupId',
......

step2 设置参数,比如“009”

......
<router-link to="/deviceGroup/009">设备分组</router-link>|
......

step3 获取参数信息

......
<h2>设备类型id:{{ $route.params.deviceGroupId }}</h2>
......

1.3、嵌套路由

嵌套路由练习层数过多时遇到了麻烦事情。相同的组件,只能显示其中一个,后来移除嵌套,绝对路由可以显示;然后再放入嵌套,问题没有了。

路由页面(index.js):

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')},{path: '/deviceGroup',name: 'deviceGroup ',children: [ {path: 'meter/hm/:vid', component: () => import('../views/meter/hm/BxHotMeterView.vue')},{path: 'meter/wm/:vid', component: () => import('../views/meter/wm/BxWaterMeterView.vue')}],component: () => import(/* webpackChunkName: "test" */ '../views/DeviceGroupView.vue')},/* {//全路径能显示path: '/deviceGroup/meter/wm/:vid',name: 'wm',component: () => import('../views/meter/wm/BxWaterMeterView.vue')},{path: '/deviceGroup/meter/hm/:vid',name: 'hm',component: () => import('../views/meter/hm/BxHotMeterView.vue')},*/{path: '/test',name: 'test ',component: () => import(/* webpackChunkName: "test" */ '../views/TestView.vue')}
]const router = new VueRouter({routes
})export default router

路由使用页面:

<template>
<div  class="deviceGroup"><h1>设备类型</h1><router-link to="/deviceGroup/meter/hm/BxHotMeter"> BX热量表</router-link> |<router-link to="/deviceGroup/meter/wm/BxWaterMeter">BX水表</router-link> |<router-view/>
</div>
</template>

1.4、编程式导航

<template>
<div  class="deviceGroup"><h1>设备类型</h1><router-link to="/deviceGroup/meter/hm/BxHotMeter"> BX热量表</router-link> |<router-link to="/deviceGroup/meter/wm/BxWaterMeter">BX水表</router-link> |<router-view/><button @click="$router.push('/test')">跳转到测试页面 push</button><button @click="$router.replace('/test')">跳转到测试页面 replace</button><button @click="$router.push({name:'test', params:{id:'123'}})">跳转到测试页面</button>
</div>
</template>

为啥 $router.replace 还是照样能回退?和文档描述有差异呀。

1.5、命名路由

<template><div id="app"><router-link to="/">Home</router-link> |<router-link to="/deviceGroup">设备类型</router-link>|<router-link :to="{ name:'test', params:{id:'123'} }">测试页面</router-link>|<router-link to="/about">About</router-link>      <router-view/></div>
</template>
<template>
<div  class="test"><h1>测试页面</h1><p>这里是测试内容:{{ $route.params.id }}</p>	
</div>
</template>

路由设置:

......{path: '/test/:id',name: 'test',component: () => import(/* webpackChunkName: "test" */ '../views/TestView.vue')},
......

1.6、命名视图

1.7、重定向和别名

<template><div id="app"><router-link to="/">Home</router-link> |<router-link to="/deviceGroup">设备类型</router-link>|<router-link :to="{ name:'test', params:{id:'123'} }">测试页面</router-link>|<router-link to="/about">About</router-link> |   <router-link :to="{ name:'baidu' }">baidu</router-link> |  <router-link :to="{ name:'redirect_test' }">测试页面: redirect_test</router-link>|   <router-link to="/test2">测试页面: test2</router-link>|  <router-view/></div>
</template>/*
index.js配置:
......{path: '/test2',name: 'redirect_test',redirect: { name: 'test', params: { id: '999'} }},{path: '/baidu',name: 'baidu',redirect: 'https://www.baidu.com'}......
*/

百度是跳转不过去的, url显示为:http://localhost:8080/#/https://www.baidu.com。

1.8、路由组件传参

上述练习的示例中都测试了参数的传递。

1.9、H5 History模式

index.js中:

......
const router = new VueRouter({mode: 'history',//base: process.env.BASE_URL,routes
})
......

将url中的#去除。

二、进阶

2.1、导航守卫

2.2、元信息

2.3、过渡动效

2.4、数据获取

2.5、滚动

2.6、懒加载

2.7、导航故障

http://www.dtcms.com/a/613890.html

相关文章:

  • Spring Boot 热部署
  • 非易失性存储器·W25Q64使用手册解读
  • 网站统计关键词重庆市建设局网站
  • 分布式缓存技术选型指南
  • mysql主从复制配置
  • html网站模板建站手机建网站推广
  • Vue 项目实战《尚医通》,预约挂号的路由与静态搭建,笔记36
  • 网站建设 风险防控网站首页的head标签内
  • 多用户跨学科交流系统(3):评论模块与 Spring Boot 全局异常处理
  • 前后端分离部署学之思在线考试系统
  • 在树莓派4B上部署ONNX格式的YOLOv8-Pose
  • websocket和传统socket有何差别?是属于一个子集还是完全不同?
  • 双指针问题2(c++)
  • 龙岩市城乡规划建设局网站三只松鼠的网络营销方式
  • Docker容器使用手册——入门篇(上)
  • C语言编译器网页版 | 轻松编写与调试C语言程序
  • QT注册自定义类相关的两个用法
  • 进程间关系(linux)
  • WordPress外贸成品网站的免费获取渠道
  • 经典算法题之汉明距离(二)
  • 公司注册网站模板上杭网站设计
  • 基于Spring AI的RAG和智能体应用实践
  • Flutter:跨平台开发终极指南
  • Python-将身份证正反面图片-生成PDF
  • 建单页网站搜网站的关键词
  • 数据科学每日总结--Day20--区块链
  • 自建网站平台有哪些建立个人网站能干
  • Docker中容器的备份方法和步骤
  • 折叠屏手机如何选:横向内折与竖向内折形态及核心参数解析
  • 我想网上做网站软件项目管理书籍推荐