美文网首页
Router简单配置

Router简单配置

作者: 莫名其妙的名字 | 来源:发表于2020-06-09 17:26 被阅读0次

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

    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);//调用请求函数
          }
          // 对路由变化作出响应...
        }
      }
    

    相关文章

      网友评论

          本文标题:Router简单配置

          本文链接:https://www.haomeiwen.com/subject/jwketktx.html