路由命名

24 篇文章 0 订阅
15 篇文章 0 订阅

路由命名

路由传参:query

    <script>
        let Foo1 = {
            template:`<div>
                    <button @click="toFoo2">go foo2</button>
                    <router-link :to="{path:'/foo2',query:{id:123}}">go foo2</router-link>
                    这是foo1的内容
                </div>`,
            methods:{
                toFoo2(){
                    // this.$router.push("/foo2");
                    this.$router.push({path:"/foo2",query:{id:"123456"}});
                }
            },
            created(){
                console.log(this.$route.query);
            }
        }
        let Foo2 = {
            template:`<div>
                 <button @click="toFoo1">go foo1</button>
                    这是foo2的内容
                    </p></div>`,
            methods:{
                toFoo1(){
                    //要是给路由传递参数,就要带上path,并且传参要使用query,获取参数也是使用query
                    this.$router.push({path:"/foo1",query:{name:"xumo",id:123}})
                }
            }
        }
        let router = new VueRouter({
            routes:[
               {path:"/foo1/:name",component:Foo1},
               {path:"/foo2",component:Foo2}
            ]
        });
        let vm = new Vue({
            el:"#app",
            router
        });
    </script>
</body>
</html>

动态路由传参:params

    <script>
        //定义路由组件
        let Foo1 = {
            template:`<div>
                    <button @click="toFoo2">go foo2</button>
                    <router-link :to="{path:'/foo2',query:{id:123}}">go foo2</router-link>
                    这是foo1的内容
                </div>`,
            methods:{
                toFoo2(){
                    // this.$router.push("/foo2");
                    this.$router.push({path:"/foo2",query:{id:"123456"}});
                }
            },
            created(){
                console.log(this.$route.query);
                console.log(this.$route.params);
            }
        }
        let Foo2 = {
            template:`<div>
                 <button @click="toFoo1">go foo1</button>
                    这是foo2的内容
                    </p></div>`,
            methods:{
                toFoo1(){
                    //动态传参路由,获取参数使用params来获取,而且还必须在路由实例中的路由后面加上name
                    const name = "123"
                    this.$router.push({path:`foo1/${name}`});
                }
            }
        }
        let router = new VueRouter({
            routes:[
               {name:"foo1",path:"/foo1/:name",component:Foo1},
               {path:"/foo2",component:Foo2}
            ]
        });
        let vm = new Vue({
            el:"#app",
            router
        });
    </script>
</body>
</html>
### 有些时候使用路由命名来标识一个路由会比使用path更加的方便,所有定义路由的时候可以添加一个name属性,而传参则可以用params或者query都是可以的,获取参数也是一样
    <script>
        let Foo2 = {
            template:`<div>
                 <button @click="toFoo1">go foo1</button>
                    这是foo2的内容
                    </p></div>`,
            methods:{
                toFoo1(){
                    //这里使用name属性,则路由实例中也需要用到name属性,否则拿不到,还有如果传参是用params传参的,获取参数则也是应用parmas
                    this.$router.push({name:"foo1",path:"/foo1",params:{userName:"xumo"}});
                }
            }
        }
        let router = new VueRouter({
            routes:[
               {name:"foo1",path:"/foo1/:name",component:Foo1},
            ]
        });
        let vm = new Vue({
            el:"#app",
            router
        });
    </script>
</body>
</html>

用router-link跳转和用编程式导航都是可以的

    <script>
        //定义路由组件
        let Foo1 = {
            //<router-link :to="{path:'/foo2',query:{id:123}}">go foo2</router-link>这个也是可以的,不过必须在to前面加上:进行绑定
            template:`<div>
                    <button @click="toFoo2">go foo2</button>
                    <router-link :to="{path:'/foo2',query:{id:123}}">go foo2</router-link>
                    这是foo1的内容
                </div>`,
            methods:{
                toFoo2(){
                    //跟用router-link一样
                    this.$router.push({path:"/foo2",query:{id:"123456"}});
                }
            }
        }
    </script>
</body>
</html>

路由的重命名

 let router = new VueRouter({
            routes:[
               {name:"foo1",path:"/foo1/:name",component:Foo1},
               {path:"/foo2",component:Foo2,alias:"/xixi"}//使用xixi也是可以访问foo2的
            ]
        });

路由的守卫导航

  1. 全局守卫:在router.js中,对router对象进行守卫设置beforeEach函数,router内所有的路径出入都要被守卫盘问

     router.beforeEach((to,from,next)=>{
                next();//必须使用next,不然无法访问
            })
    
  2. 路由独享守卫:在某个路由中设置beforeEnter函数,凡是要进入该路由的都会被守卫盘问

          // 创建router实例,然后传到路由配置
            let router = new VueRouter({
                routes:[
                   {name:"foo1",path:"/foo1/:name",component:Foo1,beforeEnter(to,from,next){
                        next()//不使用next,则无法访问foo1
                   }},
                   {path:"/foo2",component:Foo2,alias:"/xixi"}
                ]
            });
    
  3. 组件内的守卫,跟方法和data还有钩子函数是同级的

    • beforeRouteEnter(to,from,next)进入前的

      • //beforeRouteEnter不能访问this,因为守卫在导航确认前被调用,因此实例并没有创建,可以通过回调给next访问组件实例
                    beforeRouteEnter(to,from,next){
                        // next(vm=>{
                        //     console.log(vm);
                        // });
                        next();
                    },
        
    • beforeRouteUpdate(to,from,next)修改执行

       beforeRouteUpdate(to,from,next){
                      this.name = to.params.nama
                      console.log(to);
                      next();
                  },
      
    • beforeRouteLeave(to,from,next)退出后执行

      beforeRouteLeave(to,from,next){
                      const asswat = window.confirm("你确定要离开我吗?");
                      next();
                      if(asswat){
                          next();
                      }else{
                          next(false);
                      }
                  }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旭陌小生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值