Vue第二部分(5):编程式的路由导航和实战案例

本文详细介绍了在Vue.js中如何使用编程式导航进行页面跳转,包括`router.push`方法的使用,如字符串路径、对象路径和带有查询参数的路径。同时,给出了登录注册、查询添加等实际应用场景的示例代码,展示了如何在不同场景下利用Vue Router进行页面间的切换和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简要介绍

除了使用 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。

语法:router.push(location, onComplete?, onAbort?)

注意:在 Vue 实例内部,你可以通过 r o u t e r 访 问 路 由 实 例 。 因 此 你 可 以 调 用 t h i s . router 访问路由实例。因此你可以调用 this. router访this.router.push。

声明式编程式
< router-link :to="…">router.push(…)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串
router.push(’/login’)
// 对象
router.push({ path: ‘/login’ })
// 带查询参数,变成 /register?plan=private
router.push({ path: ‘register’, query: { plan: ‘private’ }})

示例:在注册后,立刻导航到登录

<div id="app">
    <router-link to="/login">登录</router-link>
    <router-link to="/register">注册</router-link>
    <hr>
    <router-view></router-view>
</div>
<template id="login-form">
    <form action="">
        用户名: <input type="text" name="username" > <br>
        密码: <input type="password" name="pwd"> <br>
        <input type="submit" value="登录">
    </form>
</template>
<template id="register-form">
    <form action="" @submit.prevent="handleRegister">
        用户名: <input type="text" name="username" > <br>
        密码: <input type="password" name="pwd1"> <br>
        确认密码: <input type="password" name="pwd2" > <br>
        <input type="submit" value="注册">
    </form>
</template>

<script>
    const loginForm = {
        template:"#login-form"
    }
    const registerForm = {
        template:"#register-form",
        methods:{
            handleRegister(){
                alert("添加成功");
                this.$router.push({path:"/login"})
            }
        }
    }
    var router = new VueRouter({
        routes:[
            {name:"default",path:"/",redirect:"/login"},
            {
                name:"login",//路由名称
                path:"/login",//路由路径
                component:loginForm//要路由到的组件
            },
            {name:"register",path:"/register",component:registerForm}
        ]
    });
    const vm = new Vue({
        el:"#app",
        components:{
            loginForm,
            registerForm
        },
        //router:router //如果路由变量名也叫router,则可以省略:router
        router
    })

</script>

实战案例

登录和注册切换

在这里插入图片描述
案例代码:

<div id="app">
    <router-view></router-view>
</div>
<template id="login-form">
    <form action="" @submit.prevent="handleLogin">
        用户名: <input type="text" > <br>
        密码: <input type="password"> <br>
        <input type="submit" value="登录">
        <router-link to="/register">注册</router-link>
    </form>
</template>
<template id="register-form">
    <form action="" @submit.prevent="handleRegister">
        用户名: <input type="text" > <br>
        密码: <input type="password" > <br>
        确认密码: <input type="password" > <br>
        <input type="submit" value="注册">   
        <router-link to="/login">登录</router-link>
    </form>
</template>
<script>
    const loginForm = {
        template:"#login-form",
        methods:{
            handleLogin(){
                alert("登录成功");
                location.href="https://www.baidu.com";
            }
        }
    };

    const registerForm = {
        template:"#register-form",
        methods:{
            handleRegister(){
                alert("注册成功");
                this.$router.push("/login");
            }
        }
    };

    const router = new VueRouter({
        routes:[
            {path:"/",redirect:"/login"},
            {path:"/login",component:loginForm},
            {path:"/register",component:registerForm}
        ]
    });

    const vm = new Vue({
        el:"#app",
        router
    })
</script>

增删改查的切换

案例效果:
在这里插入图片描述
示例代码:

<div id="app" >
    <div >
        <router-link to="/book/show"><button >查询</button></router-link>
        <router-link to="/book/add"><button >添加</button></router-link>
        <hr>
        <router-view></router-view>
    </div>
</div>
<template id="my-table">
    <table border="1">
        <thead>
            <tr>
                <th>id</th>
                <th>name</th>
                <th>price</th>
                <th>stock</th>
                <th>operation</th>
            </tr>
        </thead>
        <tbody>
            <tr v-for="b in books" :key="b.id">
                <td>{{b.id}}</td>
                <td>{{b.name}}</td>
                <td>{{b.price}}</td>
                <td>{{b.stock}}</td>
                <td>
                    <button>删除</button>
                    <router-link :to="{path:'/book/update',query:{id:b.id}}"><button>更新</button></router-link>
                </td>
            </tr>
        </tbody>
    </table>
</template>
<template id="add-form">
    <form action="">
        name: <input type="text" name="" id=""> <br>
        price: <input type="number" name="" id=""> <br>
        stock: <input type="number" name="" id=""> <br>
        <input type="submit" value="添加">
    </form>
</template>
<template id="update-form">
    <form action="">
        <input type="hidden" name="">
        name: <input type="text" name="" id=""> <br>
        price: <input type="number" name="" id=""> <br>
        stock: <input type="number" name="" id=""> <br>
        <input type="submit" value="更新">
    </form>
</template>
<script>
    const addForm = {
        template:"#add-form"           
    }

    const updateForm = {
        template:"#update-form"
    };

    const myTable = {
        template:"#my-table",
        data(){
            return {
                books:[
                    {id:1,name:"十万个为什么",price:100000.0,stock:1},
                    {id:2,name:"vue从入门到放弃",price:19800.0,stock:2}
                ]
            }
        }
    }

    const router = new VueRouter({
        routes:[
            {path:"/book/show",component:myTable},
            {path:"/book/add",component:addForm},
            {path:"/book/update",component:updateForm},
            {name:"book",path:"/book/:id",component:updateForm}
        ]
    });

    const vm = new Vue({
        el:"#app",
        router
    })
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值