zoukankan      html  css  js  c++  java
  • VueRouter-组件复用

      在使用路由参数时,比如从`/our/Xsan`跳转到`/our/foo`,原来的组件实例会被复用。因为这两个路由都是渲染的同一个组件,比起销毁再重建,复用则显得更加高效。不过,这也就意味着组件的生命周期钩子函数将不会被再次调用。

            解决办法:

      1、监听`this.route`属性。通过判断`to`和`from`来获取更新的数据。

                watch:{
                    "$route":function(to,from){
                        console.log("to:",to)
                        console.log("from:",from)
                    }
                }

      2、使用导航守卫的`beforeRouteUpdate`方法,也可以获取`to`和`from`,但是这个函数需要调用`next()`,否则页面不会更新。

                beforeRouteUpdate: function (to, from, next) {
                    console.log("to:", to)
                    console.log("from:", from)
                    next()
                }

      整体代码:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://cdn.jsdelivr.net/npm/vue"></script>
        <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
        <title>VueRouter-组件复用</title>
    </head>
    
    <body>
        <div id="app">
            <ul>
                <li>
                    <router-link to="/">首页</router-link>
                </li>
                <li>
                    <router-link to="/our/Xsan">我们</router-link>
                </li>
                <li>
                    <router-link to="/our/Xsan3333">我们2</router-link>
                </li>
            </ul>
            <router-view></router-view>
        </div>
        <script>
            var index = Vue.extend({
                template: "<h1>首页</h1>"
            })
            var our = Vue.extend({
                template: "<h1>欢迎,{{$route.params.user}}</h1>",
                mounted() {
                    console.log(this.$route.params.user)
                },
                // watch:{
                //     "$route":function(to,from){
                //         console.log("to:",to)
                //         console.log("from:",from)
                //     }
                // }
                beforeRouteUpdate: function (to, from, next) {
                    console.log("to:", to)
                    console.log("from:", from)
                    next()
                }
            })
            let router = new VueRouter({
                routes: [{
                        path: "/",
                        component: index
                    },
                    {
                        path: "/our/:user",
                        component: our
                    },
                ]
            })
            new Vue({
                el: "#app",
                router: router
            })
        </script>
    </body>
    
    </html>
  • 相关阅读:
    模板实现查找算法
    指针笔试题
    【查找算法】基于比较的查找算法(顺序查找、对分查找、分块查找)
    flask动态路由
    flask对json的内置处理模块jsonify
    pyquery和etree两个模块的区别
    单元测试初试
    求数组中子数组的最大值
    C语言小程序之读取文本文件中单词的个数并打印出频率最高的10个
    电梯去哪儿
  • 原文地址:https://www.cnblogs.com/xshan/p/12360707.html
Copyright © 2011-2022 走看看