Vue编程式导航

编程式导航和上面说的声明式导航的区别在于,声明式导航是先写好便签,然后进行导航。

编程式导航通过代码直接进行了导航。

通过this.$router.push()这个方法来实现编程式导航,
当然也可以实现参数传递,这种编程式导航一般是用于按钮点击之后跳转。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
       <h1>hello vue router</h1>
        <!-- 
            通过this.$router.push()这个方法来实现编程式导航,
            当然也可以实现参数传递,这种编程式导航一般是用于按钮点击之后跳转
         -->
         <h2>声明式导航</h2>
        <router-link to="/login">登录</router-link>
        <router-link to="/register">注册组件</router-link>
        <router-link to="/user/101">用户101</router-link>
        <router-link to="/user/102">用户102</router-link>
        <router-link to="/emp-select">员工查询</router-link>
        <router-link to="/emp-add">员工新增</router-link>
        <router-link to="/emp-delete">员工删除</router-link>
        <hr>
        <h2>编程式导航</h2>
        <button @click="doRedirect('login')">登录组件</button>
        <button @click="doRedirect('register')">注册组件</button>
        <button @click="doRedirect('user')">用户组件</button>
        <button @click="doRedirect('emp')">员工组件</button>
        <!-- 
            router-view组件
                当我们点击router-link之后,会根据路径去找对应的组件,找到对应的组件后,在router-view位置显示
         -->
         <router-view></router-view>
    </div>
    <script src="../js/vue.js"></script>
    <!-- 先引入vue的核心库,再引入router的核心库 -->
    <script src="../js/vue-router.js"></script>
    <script>
        // 1、定义组件
        const Login = {
            template:"<div><h1>登录组件</h1></div>"
        }

        let register = {
            template:"<div><h1>注册组件</h1></div>"
        }

        let User = {
            template:"<div><h1>用户组件{{$route.params.id}}</h1></div>",
            // 当使用路由参数是,例如:/user/101导航到/user102,想通组件实例将被重复使用,
            // 这意味着组件的生命周期钩子不会被调用
            // 如果想对路由参数变化做出相应,需要使用watch侦听器
            mounted () {
                console.log('User mounted');
            },
            watch: {
                /*
                侦听当前路由的变化,当路由变化时候,可以做出一些响应*/
                '$route'(to, from){
                    console.log(to,from);
                    console.log('$route监听了路由变化了');
                }
            }
        }

        let NotFount = {
            template:'<div><h1>页面没有找到</h1></div>',
        }

        let Index = {
            template:'<div><h1>欢迎使用本系统</h1></div>'
        }

        let Emp = {
            template:'<div><h1>员工组件</h1></div>'
        }
        let User = {
            template:'<div><h1>用户组件</h1></div>'
        }
        // 2、定义路由列表
        /*
            在router里面配置每一个路由,每一个路由就是一个对象
            path:表示路由路径,字符串,需要以/开头
            component:表示路由对应的组件
        */
        //路由列表的匹配模式是自上到下逐个匹配,匹配到了就执行
        //把带匹配的路径都进行放到后面

        let routes = [
            {
                path:'/login',component:Login
            },
            {
                path:'/register',component:register
            },
            {
                //*表示通配符
                path:'/user/:id',component:User
            },
            {
                //*表示通配符
                path:'/emp-*',component:Emp
            },
            {
                path:'/',component:Index
            },
            {
                path:'/*',component:NotFount
            },
        ]

        //3、创建router实例,当引入Vue.router之后,VueRouter就会成为全局函数
        let router = new VueRouter({
            //配置路由列表,配置项的名称routes
            routes:routes
        })

        
        let vm = new Vue({
            el : "#app",
            data : {
                
            },
            //4、将创建号的rouer实例,绑定给vue实例的router属性
            router,
            methods: {
                doRedirect(str) {
                    //this.$router.push('跳转路径') 
                    this.$router.push('/' + str);
                }
            }
        })
    </script>
</body>
</html>

 

posted @ 2024-08-27 15:11  洛飞  阅读(23)  评论(0编辑  收藏  举报