Router简单配置

新手笔记,如有错误,烦请指导

1、路由配置

main.js

import Vue from 'vue'
import App from './App.vue'
// 引入路由配置
import router from './router'
Vue.config.productionTip = false
new Vue({
    router,
    render: h => h(App),
}).$mount('#app')

router/index.js

import Vue from "vue";
import VueRouter from "vue-router";
// 引入组件
import index from "@/pages/index/index.vue"; 
import test from "@/pages/test/test.vue";
import header from "@/pages/index/header.vue";
import header2 from "@/pages/index/header2.vue";
import dataShow from "@/pages/test2/dataShow.vue";
// 要告诉 vue 使用 vueRouter
Vue.use(VueRouter);
const routes = [
    {
        path: "/", //默认页面
        redirect: '/index' //重定向 访问a  url会被替换成b 匹配路由也为b  (默认页面设置)
    },
    {
        path: "/index",
        component: index,
        // component: ()=>import('@/pages/index/index.vue') 
        // component:resolve=>require(['@/pages/index/index.vue'],resolve)//懒加载  (懒加载不需要import组件引入)
        children: [//子路由配置 
            {
                path: '/index/header',
                component: header
            },
            {
                path: '/index/header2',
                component: header2
            }
        ]
    },
    {
        path: "/test",
        component: test
    },
    {
        path: "/dataShow",
        component: dataShow,
        meta:{
            keepAlive:true
        }
    }
]

var router = new VueRouter({
    routes
})
export default router;

App.vue

<template>
  <div id="app">
     <router-view v-if="!$route.meta.keepAlive"> <!--判断meta.keepAlive是否存在,以此加载不同组件-->
         <!--重新渲染-->
     </router-view>
        
      <!--    router/index.js 路由配置中设置
              meta:{
                  keepAlive:true
              }
             与下面的keep-alive配合使用,组件复用时不刷新
       -->
     <keep-alive>
         <router-view v-if="$route.meta.keepAlive">
             <!-- 保留缓存 -->
         </router-view>
     </keep-alive>
  </div>
</template>
<script>
export default {
  name: 'app',
  components:{}
}
</script>

默认页面 index.vue

<template>
    <div>
        <div>这是主页</div>
        
        <router-link to="/index/header">
            点击显示子路由 页面内容1
        </router-link>
        <hr />
        <router-link to="/index/header2">
            点击显示子路由 页面内容2
        </router-link>
        
        <router-view style="color: #BB1166;"> 
            <!-- 子路由内容显示区域 -->
        </router-view>
        
        <div style="color: #0000FF;" @click="toTest">
            跳转至重新渲染页面
        </div>
        
        <div style="color: #0000FF;" @click="toDataShow">
            跳转至保留状态页面
        </div>
        
    </div>
</template>
<script>
    export default{
        name:'index',
        data(){
            return{}
        },
        methods:{
            toTest(){
                this.$router.push({path:'/test'})
            },
            toDataShow(){
                this.$router.push({path:'/dataShow'})
            }
        }
    }
</script>

子路由组件header.vue

<template>
    <div>
        <div>
            主页子内容1
        </div>
    </div>
</template>
image.png

子路由组件header2.vue

<template>
    <div>
        <div>
            主页子内容2
        </div>
    </div>
</template>
image.png

跳转至test.vue页面


image.png

非keep-live页面test.vue

<template>
    <div>
        <div>重复调用当前组件数据会 <span>进行重置</span></div>
        <input type="text" v-model="data"></input>
        <div @click="toIndex">返回</div>
    </div>
</template>
<script>
    export default {
        name: 'index',
        data() {
            return {
                data: '3333' //默认值333
            }
        }
    }
</script>

初始默认值


image.png

修改输入框值


image.png

image.png

同样从主页index.vue点击 "跳转至保留状态页面" 跳转至dataShow.vue页面 进行测试

dataShow.vue

<template>
    <div>
        <div>重复调用当前组件数据<span>不会改变</span></div>
        <input type="text" v-model="data"></input>
        <div @click="toIndex">返回</div>
    </div>
</template>
<script>
    export default {
        name: 'index',
        data() {
            return {
                data: '6666' //默认值666
            }
        }
    }
</script>

默认值为6666


image.png

修改输入框值


image.png

image.png

文件路径
image.png

2、当重复调用同一组件时,vue不会重新创建,而是进行复用。 此时会出现再次进入同一个页面时 之前的数据未清空(不会调用页面钩子函数)

解决办法

—(1)路由文件统一设置是否保持缓存
—(2)页面中利用watch监听路由变化

watch: {
    '$route' (val) {//复用组件时 钩子函数不会被调用 数据不会重新请求,通过监听路由参数变化判断
      if(val.query.id){//如果路由参数存在就调用方法
          this.getData(val.query.id);//调用请求函数
      }
      // 对路由变化作出响应...
    }
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342