首页 > 其他分享 >Vue中的嵌套路由

Vue中的嵌套路由

时间:2024-11-29 12:00:33浏览次数:7  
标签:Vue views component 嵌套 vue import path 路由

一、Vue中的嵌套路由

1.App.vue中的代码

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

 

2.router/index.js:   children中的子路由,path 不加  '/',访问main,先获取main对应的组件,对应的路由出口在App.vue中,redirect的属性值为访问 父组件时,会强制访问父组件下某个子组件,该组件对应的路由出口在父组件中

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'

Vue.use(VueRouter)

// 路由中的文件加载对应的是app.vue的路由出口
// 路由中的文件的子文件加载对应的是该文件中的路由出口
//      如:main下面的news的加载,是在main中的routerview中显示的
const routes = [
  {
    path: '/login',
    component:  () => import( '../views/LoginView.vue')
  },
  {
    path: '/main',
    component:  () => import( '../views/MainView.vue'),
    redirect:'/main/news',
    children:[
      {
        path: 'home',
        name: 'home',
        component: HomeView
      },
      {
        path: 'about',
        name: 'about',
        component: () => import( '@/views/AboutView.vue')
      },
      {
        path: 'news',
        component: () => import('@/views/NewsView.vue')
      },
      {
        path: 'editor',
        component: () => import('@/views/EditorView.vue')
      },
      {
        path: 'product',
        component: () => import('@/views/ProductView.vue')
      },
      {
        path: 'case',
        component: () => import('@/views/CaseView.vue')
      }
    ]
  }
]

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

export default router

 

3.LoginView.vue

<template>
    <div>
        <h1>登录</h1>
        {{ $store.state.token }}
        <el-form ref="form" :rules="rules"  :model="form" label-width="80px">
            <el-form-item label="账号" prop="username">
                <el-input v-model.trim="form.username" ></el-input>
            </el-form-item>
            <el-form-item label="密码" prop="password">
                <el-input type="password" v-model="form.password" ></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit">登录</el-button>
            </el-form-item>
       </el-form>
    </div>
</template>

<script>
    export default {
        methods:{
            onSubmit(){
                this.$refs.form.validate((valid) => {
                    if (valid) {
                        this.$store.dispatch('setTokenAsync',this.form);
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            }
        },
        data(){
            return {
                form:{},
                rules: {
                    username: [
                        { required: true, message: '请输入账号', trigger: 'blur' },
                        { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
                    ],
                    password: [
                        { required: true, message: '请输入密码', trigger: 'blur' }
                    ]
                 }
            }
        }
    }
</script>

<style lang="scss" scoped>

</style>

 

4.MainView.vue: 在MainView.vue中,访问对应的子路由时,to='/父组件访问时对应的path/子组件对应的path',此时访问的子组件  ,显示对应的路由出口在MainView.vue文件中。

<template>
    <div>
        <!-- MainView.vue页面对应的路由出口在app.vue -->
        <nav>
            <router-link to="/main/home">Home</router-link> |
            <router-link to="/main/about">About</router-link> |
            <router-link to="/main/news">新闻列表</router-link> |
            <router-link to="/main/product">产品列表</router-link> |
            <router-link to="/main/case">案例列表</router-link>|
            <router-link to="/main/editor">编辑器</router-link> 
        </nav>
        <!-- 点击MainView.vue页面上的链接,对应的视图对应的路由出口在这里 -->
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        
    }
</script>

 

5.页面效果

访问login

 

访问main

 

标签:Vue,views,component,嵌套,vue,import,path,路由
From: https://www.cnblogs.com/njhwy/p/18576292

相关文章

  • 基于SpringBoot+Vue的游戏娱乐交友数据平台设计和实现(源码+论文+部署)
    目录:目录:博主介绍: 完整视频演示:你应该选择我技术栈介绍:需求分析:系统各功能实现一览:1.注册2.登录部分代码参考: 项目功能分析: 项目论文:源码获取:博主介绍: ......
  • vue生命周期
    1.**beforeCreate(创建前)**:-在实例初始化之后,数据观测(dataobserver)和event/watcher事件配置之前被调用。2.**created(创建后)**:-实例已经创建完成,数据观测和事件/侦听器已经配置好,但是挂载阶段尚未开始,`$el`属性目前不可见。3.**beforeMount(挂载前)**:-在挂载开......
  • 手动实现vue3的select下拉框的滚动加载和虚拟滚动,简单易懂
    首先,滚动加载和虚拟滚动都是为了解决数据量大的渲染性能问题,但是也有区别,滚动加载并没有从根本上解决问题,只是滚动到可视区域底部动态加载,二虚拟滚动是永远只渲染固定数量(通常是可视区域内)的所以可以从根本上解决这种性能问题。如果只想了解滚动加载只看第一部分即可。这两种技......
  • 【前端Vue】day04
    一、学习目标1.组件的三大组成部分(结构/样式/逻辑)​scoped解决样式冲突/data是一个函数2.组件通信组件通信语法父传子子传父非父子通信(扩展)3.综合案例:小黑记事本(组件版)拆分组件列表渲染数据添加数据删除列表统计清空持久化4.进阶语法v-model原理v-model应用于组件s......
  • 【前端Vue】day03
    一、今日目标1.生命周期生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例2.综合案例-小黑记账清单列表渲染添加/删除饼图渲染3.工程化开发入门工程化开发和脚手架项目运行流程组件化组件注册4.综合案例-小兔仙首页拆分模块-局部注册结构样式完善拆分组件–......
  • Vue 项目开发常用知识点
    一、基础语法与指令1.插值表达式插值表达式是Vue中最基础的数据绑定方式,使用双大括号{{}}将数据包裹起来,例如{{message}},它会将Vue实例中的message属性的值渲染到页面相应位置。这种方式可以方便地在页面中展示动态数据,如从后端获取的数据或者用户输入的信息。2.......
  • 基于SpringBoot+Vue的火锅店管理系统+万字论文+Mp4演示
    !!!有需要的小伙伴可以通过文章末尾名片咨询我哦!!!......
  • 【热门主题】000066 Vue.js 组件开发全攻略:从基础到实践
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • [Vue] Watch and WatchEffect
    WatchLet’slookatanothersimpleexampleusingourcompositionAPI. Here’ssomecodethathasasimplesearchinputbox,usesthesearchtexttocallanAPI,andreturnsthenumberofeventsthatmatchtheinputresults.<template><div>......
  • [Vue] Composition API LifeCycle Methods
    InVue3’sCompositionAPIwecancreatecallbackhooksinside setup() byadding on totheLifeCyclemethodname:import{onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted,onActivated,onDeactivated,on......