Vue全家桶之 router(路由)

Vue的路由

通常搭配component使用

【1】Vue中路由router的基本使用

定义:vue router 是vue js 官方路由管理器,它和vue.js的核心深度集成,让构建单页面应用变得易如反掌

通过使用vue Router 可以将现有的Vue开发变得更加灵活,他可以根据前端请求的url不同对应在页面中展示不同的组件

先配置一个路由规则

组件先交给路由管理

a、下载 vue router js 并在页面中引用

b、创建路由规则并注册

const router = new VueRouter({}) ------------------------ 创建路由规则对象

path: '/login', //path代表路由路径

component: login //component代表路由路径对应的组件

redirect : ' ' // 代表路由重定向

path : ' * ' //通配符匹配任意路由

c、在页面展示路由组件

  
  <div id="app">
          <div>{{msg}}</div>
          <!-- 显示路由的标签 -->
          <a href="#/login">用户登录</a>
          <a href="#/reg">用户注册</a>
          <router-view></router-view>
  </div>
  

d、添加切换路由的连接

path: '/login',   //path代表路由路径

component: login //component代表路由路径对应的组件

#/      ---------------------------------哈希路由

路由重定向: redirect : ' '

【2】Vue中路由切换的两种方式

(1)通过标签形式切换路由 ------------------------------使用router-link切换路由

<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <!-- 路径切换路由:根据路由对象的路径切换路由显示不同的组件  -->
        <!-- a标签切换路由 (最简单)-->
        <a href="#/login">用户登录</a>
        <a href="#/register">用户注册</a>
​
        <!-- link 切换路由的标签 (类似a标签) 标签上必须加入to属性  to="路由路径"-->
        <router-link to="/login">用户登录</router-link>
        <router-link to="/register">用户注册</router-link>
        <!-- 切换路由标签 -->
        <router-link :to="{path:'/login'}">用户登录</router-link>
        <router-link :to="{path:'/register'}">用户注册</router-link>
​
        
        
        <!-- 名称切换路由:根据路由对象的名称切换路由显示不同的组件 -->
        <!-- 根据名称切路由只能使用router-link  推荐使用命名路由-->
        <router-link :to="{name:'Login'}">用户登录</router-link>
        <router-link :to="{name:'Register'}">用户注册</router-link>
        
        
        
        
        <!-- 展示路由组件标签 -->
        <router-view></router-view>
    </div>
</body>

推荐使用命名路由

<script src="../../js/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.0/dist/vue-router.js"></script>
<script>
    // 登录组件
    const login = {
        template: `<div><h1>用户登录</h1></div>`
    };
    //注册组件
    const register = {
        template: `<div><h1>用户注册</h1></div>`
    };
    //创建路由规则对象
    var router = new VueRouter({
        //定义路由规则
        routes: [{
            //name:代表路由对象名称   用来给路由对象一个唯一名称标识
            path: '/login',
            component: login,
            name: 'Login'
        }, {
            path: '/register',
            component: register,
            name: 'Register'
        }]
    })
    const app = new Vue({
        el: "#app",
        data: {
            msg: "vue router 基本使用之使用 router-link 切换路由"
        },
        //注册路由对象
        router,
    })
</script>

(2) 通过 js 代码形式切换路由

this.$route object ---- 当前路由对象 this.$router vueRouter --- 路由管理器对象

在vue路由中,多次切换同一个路由存在的问题

1、在vue中多次切换相同路由会出现错误。

解决方案:

a、第一种:每次切换路由之前手动判断

if(this.$route != 'Login'){

this.$router.push({path:'Login'});

}

b、在创建路由规则对象之后加入以下配置

this.$router.push("/location").catch((err) => { console.log(err); });

<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <button @click="login">用户登录</button>
        <button @click="register">用户注册</button>
        <!-- 展示路由组件标签 -->
        <router-view></router-view>
    </div>
</body>


<script src="../../js/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.0/dist/vue-router.js"></script>
<script>
    const login = {
        template: `<div><h1>用户登录</h1></div>`
    };
    const register = {
        template: `<div><h1>用户注册</h1></div>`
    };
    //创建路由规则对象
    const router = new VueRouter({
        routes: [{
            path: '/login',
            component: login,
            name: 'Login'
        }, {
            path: '/register',
            component: register,
            name: 'Register'
        }]
    })
    const app = new Vue({
        el: "#app",
        data: {
            msg: "使用 js 代码的形式切换路由"
        },
        methods: {
            login() {
                //发送axios请求完成登录   响应回来之后切换路由到主页
                //this.$route object ---- 当前路由对象    this.$router vueRouter --- 路由管理器对象
                console.log(this)
                    // 使用路由器对象切换
                this.$router.push('/login'); //切换路由 (根据路径切换或者根据名字切换)
                this.$router.push({
                    path: '/login'
                });
                this.$router.push({
                    name: 'Login'
                }); //使用名称切换
            },
            register() {
                this.$router.push({
                    name: 'Register'
                }); //使用名称切换
            }
        },
        //注册路由对象
        router,
    })
</script>

【3】Vue router 基本使用之参数传递

地址栏传递参数分为两种方式:

第一种:queryString ? ----------- 使用 this.$router.query.key 接收

第二种:restful 路径传递参数 ---------- / XX / 21 使用 this.$router.params.key 接收

<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <!-- [1] queryString 传参 -->
        <router-link :to="{path:'/login?name=小小&password=123'}">用户登录</router-link>
        <router-link :to="{path:'/register'}">用户登录</router-link>
        <!-- 展示路由组件标签 -->
        <router-view></router-view>
    </div>
</body>
​
<script src="../../js/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.0.0/dist/vue-router.js"></script>
<script>
    const login = {
        template: `<div><h1>用户登录</h1></div>`,
​
        created() {
            console.log("created");
            console.log(this.$route); //获取当前路由对象
            console.log(this.$route.query.name); //获取当前路由对象
            console.log(this.$route.query.password); //获取当前路由对象
        }
    };
    const register = {
        template: `<div><h1>用户注册</h1></div>`
    };
    const router = new VueRouter({
​
        routes: [{
​
            path: '/login',
            component: login,
            name: 'Login'
​
        }, {
​
            //[2] request 路径传参
            path: '/register/:id/:name',
            component: register,
            name: 'Register'
        }]
    });
    const app = new Vue({
        el: "#app",
        data: {
            msg: "vue router 基本使用之参数传递"
        },
        router,
    })
</script>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰镇奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值