vue之router-view组件的使用

开发的时候有时候会遇到一种情况,比如 :点击这个链接跳转到其他组件的情况,通常会跳转到新的页面,蛋是,我们不想跳转到新页面,只在当前页面切换着显示,那么就要涉及到路由的嵌套,也可以说是子路由的使用。

 

以饿了么订餐的情景来说吧,在同个页面,切换显示不同组件的相应内容,同时地址栏的地址是会变的

怎么实现它呢?

首先 我们在导航组件navbar.vue中写了三个导航链接,他们对应地址分别为:/food,/rating,/seller,点击每个导航链接会跳转到不同的组件,并且加上<router-view></router-view>这个标签

navbar.vue:

<template>
	<div class="navbar">
		<ul id="main">
			<li><router-link  to="/food" >商品</router-link></li>
			<li><router-link  to="/rating">评价</router-link></li>
			<li><router-link  to="/seller">商家</router-link></li>

		</ul>
		
            <!-- 路由匹配到的组件将显示在这里 -->
           <router-view></router-view>
	</div>
</template>

然后,我们在index.vue引入navbar.vue:

index.vue:


<template>
	<div class="index">
		<div class="nav"></div>
		<div class="shop-header">
			<div class="imgbox"><img src="../../static/img/56.jpg" alt="" /></div>
			<h2>黄蜀郞鸡公煲<span class="ico"></span></h2>
			<p class="info1"><span>*4.6</span><span>月售738</span><span>商家配送约44分钟</span><span>距离345m</span></p>
			<p class="info2">店内免费涮煲,(蔬菜、小料、主食、糕点、凉菜、水果、免费吃)闻香识辣,入口知麻,一锅两吃,独具特色!!!外卖米饭请自点!!评价问题商家会一一看,可能不能及时回复。有问题详询18232966036</p>

		</div>


         <!--在这里引入navbar组件在这里引入navbar组件在这里引入navbar组件在这里引入navbar组件-->
		<navbar></navbar>
         <!--在这里引入navbar组件在这里引入navbar组件在这里引入navbar组件在这里引入navbar组件-->
		
		
		
	</div>
</template>

<script>
	import navbar from '@/components/navbar'
	
	import food from '@/components/food'
	export default {
		name: 'HelloWorld',
		data() {
			return {
				
				msg:[]
			}
		},

		components: {
			navbar
			
		}
	}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->

<style lang="stylus">
	@import '../../static/css/index.styl';
</style>

 

最后,路由都是怎么配的呢,在index.js中:

{
      path: '/',
      name: 'index',
      component: index,
      redirect:'/food',
      children:[
      
    {
      path: 'food',
      name: 'food',
      component: food
    },
    {
      path: 'seller',
      name: 'seller',
      component: seller
    },
    {
      path: 'rating',
      name: 'rating',
      component: rating
    }
      ]
    },

 

 

<think>我们正在讨论Vue2中如何使用router-view组件进行路由配置。根据引用内容,我们可以总结如下: 1. 首先需要安装并配置Vue Router(如引用[1]所示)。 2. 在路由配置中定义路由路径和对应的组件。 3. 在Vue实例中挂载配置好的路由。 4. 在组件模板中使用<router-view>标签作为路由组件的出口,即路由匹配到的组件将渲染在这里。 具体步骤: 1. **安装Vue Router**(如果尚未安装): ```bash npm install vue-router@3 # Vue2对应的是vue-router的3.x版本 ``` 2. **创建路由配置文件**(如引用[1]所示,将路由配置提取到单独文件): 在项目中创建`src/router/index.js`文件,并配置路由: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' // 导入组件 import Home from '@/views/Home.vue' import About from '@/views/About.vue' Vue.use(VueRouter) const routes = [ { path: '/', component: Home }, // 根路径 { path: '/about', component: About } ] const router = new VueRouter({ routes // (缩写) 相当于 routes: routes }) export default router ``` 3. **在main.js中导入并挂载路由**: ```javascript import Vue from 'vue' import App from './App.vue' import router from './router' // 会自动导入router目录下的index.js new Vue({ router, // 挂载路由 render: h => h(App) }).$mount('#app') ``` 4. **在App.vue(或其它布局组件)中使用<router-view>**: ```vue <template> <div id="app"> <!-- 导航链接 --> <router-link to="/">Home</router-link> <router-link to="/about">About</router-link> <!-- 路由出口,匹配到的组件将渲染在这里 --> <router-view></router-view> </div> </template> ``` 5. **处理嵌套路由**(如引用[2]中提到的children): 在路由配置中,可以使用嵌套路由来配置子路由: ```javascript const routes = [ { path: '/user', component: User, children: [ { // 当 /user/profile 匹配成功 // UserProfile 会被渲染在 User 的 <router-view> 中 path: 'profile', component: UserProfile }, { path: 'posts', component: UserPosts } ] } ] ``` 然后在`User`组件的模板中放置一个`<router-view>`用于渲染子路由。 6. **设置默认路由**(如引用[3]所示): 可以使用重定向来设置默认路由: ```javascript const routes = [ { path: '/', redirect: '/home' }, // 将根路径重定向到/home { path: '/home', component: Home }, // ... ] ``` 或者使用空路径的嵌套路由作为默认子路由: ```javascript children: [ // 当 /user 时,默认渲染 UserHome { path: '', component: UserHome }, // ...其他子路由 ] ``` 7. **激活链接的样式**: 当前激活的链接会自动添加一个`router-link-active`类,可以通过CSS设置样式。 ```css .router-link-active { color: red; } ``` 注意事项: -Vue2中,使用`vue-router`的版本应保持在3.x(最新为3.6.5),因为Vue2不支持`vue-router@4`(Vue3专用)。 - 如果遇到类似引用[4]中的问题(组件无法使用),可以尝试重新安装依赖。 相关问题: 1. Vue2中如何配置嵌套路由? 2. 如何自定义`router-link`的激活样式? 3. 在Vue2中,如何实现路由懒加载? 4. 如何监听路由变化? 5. Vue2中如何实现路由守卫(导航守卫)?</think>### Vue2 中 `router-view` 组件使用指南 在 Vue2 中,`router-view` 是路由的核心渲染出口,负责根据路由配置动态渲染匹配的组件。以下是完整配置流程: --- #### 一、基础配置步骤 1. **安装路由** ```bash npm install vue-router@3 # Vue2 专用版本 ``` 2. **创建路由配置文件**(推荐独立模块) ```javascript:src/router/index.js import Vue from 'vue' import VueRouter from 'vue-router' import Home from '@/views/Home.vue' import About from '@/views/About.vue' Vue.use(VueRouter) // 启用路由插件 const routes = [ { path: '/', component: Home }, // 根路径 { path: '/about', component: About } // 子路径 ] const router = new VueRouter({ routes }) export default router // 导出路由实例 ``` 3. **挂载到 Vue 实例** ```javascript:src/main.js import Vue from 'vue' import App from './App.vue' import router from './router' // 自动导入 router/index.js new Vue({ router, // 注入路由 render: h => h(App) }).$mount('#app') ``` 4. **在组件使用 `router-view`** ```vue:src/App.vue <template> <div id="app"> <!-- 导航链接 --> <router-link to="/">首页</router-link> <router-link to="/about">关于</router-link> <!-- 路由渲染出口 --> <router-view></router-view> </div> </template> ``` --- #### 二、核心功能详解 1. **嵌套路由** 使用 `children` 配置嵌套结构,父组件需包含 `<router-view>`: ```javascript:router/index.js const routes = [ { path: '/user', component: UserLayout, children: [ { path: '', component: UserHome }, // /user { path: 'profile', component: Profile } // /user/profile ] } ] ``` ```vue:UserLayout.vue <template> <div> <h1>用户中心</h1> <router-view></router-view> <!-- 嵌套路由渲染位置 --> </div> </template> ``` 2. **默认路由** 通过 `redirect` 设置默认指向: ```javascript { path: '/', redirect: '/home' } // 访问 / 重定向到 /home ``` 3. **动态路由匹配** 使用 `:` 定义参数: ```javascript { path: '/user/:id', component: UserDetail } // 通过 $route.params.id 获取参数 ``` --- #### 三、关键注意事项 1. **`router-view` 是渲染容器** - 根据当前路由路径自动渲染匹配的组件 - 需与 `router-link` 导航组件配合使用[^1] 2. **激活链接样式** - 当前激活的 `router-link` 自动添加 `.router-link-active` 类 - 自定义样式示例: ```css .router-link-active { color: red; font-weight: bold; } ``` 3. **布局层级** ```vue <template> <div> <!-- 一级路由 --> <router-view></router-view> <!-- 二级路由 --> <router-view name="sidebar"></router-view> </div> </template> ``` --- #### 四、常见问题解决 1. **组件未渲染** - 检查路由路径是否拼写错误 - 确认 `router-view` 是否在父组件模板中 2. **路由版本冲突** Vue2 必须使用 `vue-router@3.x`,安装错误版本会导致组件失效[^4] 3. **重定向循环** 避免在 `redirect` 中指向自身路径: ```javascript // 错误示例 { path: '/a', redirect: '/a' } // 正确示例 { path: '/a', redirect: '/b' } ``` --- ### 相关实践问题 1. 如何在嵌套路由中传递参数? 2. Vue2 路由守卫(`beforeEach`)如何实现权限控制? 3. 如何配置路由懒加载提升性能? 4. 动态路由参数变化时如何触发组件更新? 5. 如何实现路由过渡动画效果? > 提示:参考 Vue Router 官方文档获取完整 API:[Vue Router v3 文档](https://router.vuejs.org/zh/guide/)
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值