【Vue】路由器插件——vue-router

编程知识 更新时间:2023-05-02 04:31:36

文章目录

  • 前言
  • 具体实现
    • index.js:路由器对象模块
    • main.js:入口JS
    • App.vue
    • Messages.vue
    • MessageDetail.vue

前言

具体实现

编写路由的3步
    1. 定义路由组件    
    2. 映射路由
    3. 编写路由2个标签

index.js:路由器对象模块

import Vue from "vue"
import VueRouter from "vue-router"
import About from "../views/About"
import Home from "../views/Home"
import News from "../views/News"
import Messages from "../views/Messages"
import MessageDetail from "../views/MessageDetail"
// 声明使用vue-router插件
/*
内部定义并注册了2个组件标签(router-link/router-view),
给组件对象添加了2个属性:
  1. $router: 路由器
  2. $route: 当前路由
 */
Vue.use(VueRouter);
export default new VueRouter({
  routes: [ // 注册应用中所有的路由 将path与路由组件对应
    { //一般路由
      path: "/about",  // path的最左侧 / 为根路径
      component: About,
      children:[  //嵌套路由(子路由)
        {
          path: "news",  //同 “/about/news”
          component: News
        },
        {
          path: "messages",
          component: Messages,
          children:[ //二次嵌套路由
            {
              path:"/about/messages/detail/:id", //占位语法 params参数 组件可通过 对象.$route.params.id取出
              component:MessageDetail
            }
          ]
        },
        {
          path:"/About",
          redirect: "/About/news"  //默认显示
        }
      ]
    },
    {
      path: "/home",
      component:Home
    },
    {  // 自动跳转路由
      path: "/", 
      redirect:"/home"
    }
  ]
});

main.js:入口JS

import Vue from "vue"
import App from "./App"
import router from "./router"  //引入路由器,由于是index.js写到这里文件夹就行
new Vue({
  el: "#app",
  components: {App},  // 映射组件标签
  template: "<App/>",  // 指定需要渲染到页面的模板
  router  // 注册路由器   故任务路由组件对象都有属性$router  $route
});

App.vue

<div class="list-group">
  <!--生成路由链接-->
  <router-link to="/about" class="list-group-item" >About</router-link>
  <router-link to="/home" class="list-group-item">Home</router-link>
</div>
。。。
<keep-alive>  <!--缓存路由组件:适用低实时性要求-->
  <router-view msg="abc"></router-view>  <!--本页的路由触发-->
</keep-alive>

PS:当组件被选中后,router-link会多出风格类名class=“router-link-exact-active router-link-active”,可认为给该修饰类增加style

.router-link-active{
	color:red;
}

Messages.vue

<template>
  <div>
    <ul>
      <li v-for="(item,index) in messagesArr" :key="item.id">
        <router-link :to="`/about/messages/detail/${item.id}`"> {{item.title}}</router-link>  <!--:to的右侧“”里被:强制绑定为变量(用JS语法-->
        <button @click="push(item.id)">push查看</button>
        <button @click="replace(item.id)">replace查看</button>
      </li>

    </ul>
    <hr>
    <router-view></router-view>
    <button @click="$router.back()">回退</button> <!--弹出栈顶地址并访问-->
  </div>
</template>
。。。
      methods:{
        push(id) {
          this.$router.push(`/about/messages/detail/${id}`); //访问该地址并压进栈
        },
        replace(id) {
          this.$router.replace(`/about/messages/detail/${id}`); //访问该地址并替换栈顶地址
        }
      }
向路由组件传递数据
    params:<router-link :to="`/about/messages/detail/${item.id}`"></router-link>
    props: <router-view msg='abc'>  //别的路由组件需用props接收为自身属性再使用,类似组件间props方式通信

MessageDetail.vue

watch:{
          $route:function (value) {
            const id = value.params.id;
            //.find是返回符合要求的第一个数组元素  .filter返回的是数组
            this.messageDetail =this.allMessagesDetails.find(detail =>detail.id===id);
          }
      }

更多推荐

【Vue】路由器插件——vue-router

本文发布于:2023-04-25 22:26:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/b7312331c2b551840fbb63ede8b87f53.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路由器   插件   Vue   vue   router

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 103780文章数
  • 26190阅读数
  • 0评论数