• VueRouter-编程式导航


      背景

    `<router-link>`是在用户点击的情况下进行页面更新,但是有时候,我们想要在`js`中手动的修改页面的跳转,此时就需要“编程式导航”了。

      方法

                有三种方法:
                1、`this.$router.push`:转到下一个`url`,会把新传入的url添加到浏览器的`history`中。
                    push的参数:
                    1)字符串:直接就是路径
           this.$router.push("/post")
                    2)对象:path和name都可以,但是使用`path`时,参数必须添加到`path`中,放到`params`中无效。
                        // 传递对象
                        // this.$router.push({path:"/profile/Xsan"})
                        this.$router.push({
                            name: "myprofile",
                            params: {
                                userID: "Xsan"
                            }
                        })        
                2、`this.$router.replace`:跟`push`一样,只不过是直接替换当前页面,不会添加到浏览器的`history`中。
                        let currentPath = this.$route.fullPath
                        this.$router.replace({
                            path: "/login",
                            query: {
                                from: currentPath
                            }
                        })
                3、`this.$router.go`:传递的是步数,正数为下一步,负数为上一步。
                    // 下一步
              gotoNext() { this.$router.go(1) },
              // 上一步 gotoPrevent() { this.$router.go(-1) }

      整体代码:

    <!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">
            <button @click="gotoPost">帖子列表</button>
            <button @click="gotoProfile">个人中心</button>
            <button @click="gotoLogin">登录</button>
            <button @click="gotoNext">上一步</button>
            <button @click="gotoPrevent">下一步</button>
            <router-view></router-view>
        </div>
        <script>
            var post = Vue.extend({
                template: "<h1>帖子列表</h1>"
            })
            var profile = Vue.extend({
                template: "<h1>个人中心:{{$route.params.userID}}</h1>"
            })
            var login = Vue.extend({
                template: "<h1>登录:{{$route.query}}</h1>"
            })
            let router = new VueRouter({
                routes: [{
                    path: "/post",
                    component: post
                }, {
                    path: "/profile/:userID",
                    component: profile,
                    name: "myprofile"
                }, {
                    path: "/login",
                    component: login
                }]
            })
            new Vue({
                el: "#app",
                router,
                methods: {
                    gotoPost() {
                        this.$router.push("/post")
                    },
                    gotoProfile() {
                        // 直接传递字符串
                        // this.$router.push("/profile/Xsan")
                        // 传递对象
                        // this.$router.push({path:"/profile/Xsan"})
                        this.$router.push({
                            name: "myprofile",
                            params: {
                                userID: "Xsan"
                            }
                        })
                    },
                    // 如果要传参则,将要传递的值以键值对的形式通过query传递
                    gotoLogin() {
                        let currentPath = this.$route.fullPath
                        // this.$router.push({
                        //     path: "/login",
                        //     query: {
                        //         from: currentPath
                        //     }
                        // })
                        // 或者使用replace,但是replace不会将本次跳转记录到`history`中
                        this.$router.replace({
                            path: "/login",
                            query: {
                                from: currentPath
                            }
                        })
                    },
                    gotoNext() {
                        this.$router.go(1)
                    },
                    gotoPrevent() {
                        this.$router.go(-1)
                    }
                }
            })
        </script>
    </body>
    
    </html>
  • 相关阅读:
    找一个数组的最大和的连续子数组(时间复杂度 O(n))
    Web版需求征集系统所得2,servlet中request.getParameter获值乱码问题解决
    Web版需求征集系统所得1,servlet中获取checkbox复选框的值
    人月神话读后感(三)
    Web版记账本开发记录(三)开发过程遇到的问题小结2
    人月神话读后感(二)
    团队开发项目--校园知网 nabcd 需求分析
    软件工程--第六周学习进度
    软件工程--第五周学习进度
    人月神话阅读笔记03
  • 原文地址:https://www.cnblogs.com/xshan/p/12362820.html
Copyright © 2020-2023  润新知