Vue简单实例——路由2

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。Vue简单实例——路由2,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在上一个章节我们说明了有关路由的基本使用以及嵌套路由、命名路由的使用,本章的内容我们讲解有关路由传参,编程式导航,路由拦截的部分内容,对应课本上134到144页的内容,我们也会尽量用课本上的案例进行演示。

首先是有关路由传参部分的内容:

query的方式:

在路由传参中有两种方式进行参数的传递,第一种就是query的方式,这种方式主要的特征就是在传递参数的时候,要先再路由规则的path属性中使用占位符进行占位,然后在传递参数的时候,参数的形式是以二级目录的形式进行传递。然后将to属性的参数变成一个对象,传递的参数就在to属性的值这个对象中进行设定

首先需要再创建一个二级路由,达成三层路由嵌套,最底层的路由组件就是用来显示接受到的参数的路由组件:

路由器文件中的内容:

//该文件专门用于创建整个应用的路由器
//首先导入vue-router的插件
import VueRouter from "vue-router";
//引入用来显示的组件
import routerOne from "@/page/router-one";
import routerTwo from "@/page/router-two";
// 这个组件是用来动态的接收参数并显示的
import detail from "@/page/detail"
//嵌套路由的组件
import routerNext from "@/page/router-next";

//创建一个路由实例,在实例里面传入一个参数,该对象的参数用于设定路由规则
export default new VueRouter({
    //这里的routers对应的就是一个路由器可以管理很多的路由
    routes:[
        //既然是可以管理很多的路由,那么这个路由器里面就可以放置很多的路由对象
        {
            path:'/one',//这里的path属性就是对应的kay
            component:routerOne//component就是对应的value,并且也表明了value的类型,属于是前端路由
        },
        {
            path:'/two',
            component:routerTwo,
            //在第二个路由组件中设置一个children属性,属性的值就是嵌套路由的地址和组件
            children:[
                {
                    name:'next',
                    path:'next',
                    component:routerNext,//最后就是嵌套路由的显示组件
                    // 这个子组件的作用是用来显示不同的内容
                    children:[
                        {
                            path:'detail',
                            component:detail
                        }
                    ]
                }
            ]
        }
    ]
})

父路由组件中的内容:

<template>
  <div>
    <ul v-for="item in items" :key="item.name">
      <!-- 在传递query参数的时候,需要使用v-bind绑定to属性,这时候to属性的参数就可以是一个对象了 -->
      <!-- 在这个对象中,path属性就是路由路径,query的值就是传递的参数 -->
    <router-link :to="{
      path:'/two/next/detail',
      query:{
        id:item.id
      }
    }">
    {{item.id}}
  </router-link>
  </ul>
  <hr>
  <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: "router-next",
  data(){
    return{
      items:[
        {name:'张三',id:'001'},
        {name:'李四',id:'002'},
        {name:'王五',id:'003'}
      ]
    }
  }
}
</script>

<style scoped>

</style>

子路由组件中的内容:

<template>
    <div>
        <ul>
            <!-- 在父路由组件中传递参数,在子路由组件中接收的时候就需要使用一个属性:$route -->
            <!-- route属性保存的就是这个组件的路由信息,其中的query属性就是我们刚才传递的参数 -->
            <!-- id属性就是我们之前传递的时候在to中设置的参数名称 -->
            <li>用户ID:{{this.$route.query.id}}</li>
        </ul>
    </div>
</template>

<script>
    export default{
        name:'Detail_demo',
        mounted(){
            console.log(this);
        }
    }
</script>

<style scoped>

</style>

基本步骤:

1.首先定义一个用来显示接受参数的路由组件,然后在路由器文件中定义路由的地址

2.在父路由组件中定义跳转链接,并将to用v-bind指令绑定,并将to的值变成一个对象,设置path属性和query属性,query就是我们传递参数的属性。

3.在显示接受参数的路由组件中用差值表达式,使用$route.query.参数的形式来接受参数

parms形式:

之前说过,传递参数有两种方式,第二种方式就是通过params的方式,也就是在导航栏中传递参数,类似于我们使用get请求的时候,参数都写在地址栏的最后,一个问号“?”表示开始传递参数,多个参数之间用“&”分开,接下来我们就用代码的方式来看这个操作是如何实现的:

路由器文件中的内容:

//该文件专门用于创建整个应用的路由器
//首先导入vue-router的插件
import VueRouter from "vue-router";
//引入用来显示的组件
import routerOne from "@/page/router-one";
import routerTwo from "@/page/router-two";
// 这个组件是用来动态的接收参数并显示的
import detail from "@/page/detail"
//嵌套路由的组件
import routerNext from "@/page/router-next";

//创建一个路由实例,在实例里面传入一个参数,该对象的参数用于设定路由规则
export default new VueRouter({
    //这里的routers对应的就是一个路由器可以管理很多的路由
    routes:[
        //既然是可以管理很多的路由,那么这个路由器里面就可以放置很多的路由对象
        {
            path:'/one',//这里的path属性就是对应的kay
            component:routerOne//component就是对应的value,并且也表明了value的类型,属于是前端路由
        },
        {
            path:'/two',
            component:routerTwo,
            //在第二个路由组件中设置一个children属性,属性的值就是嵌套路由的地址和组件
            children:[
                {
                    name:'next',
                    path:'next',
                    component:routerNext,//最后就是嵌套路由的显示组件
                    // 这个子组件的作用是用来显示不同的内容
                    children:[
                        {
                            // 占位符,用来在以params的形式传递参数的时候判断从第几层目录开始为参数
                            path:'detail/:id',
                            component:detail,
                            // 在使用对象语法传递params参数的时候,必须使用name属性代替path
                            name:'detail'
                        }
                    ]
                }
            ]
        }
    ]
})

父路由组件中的内容:

<template>
  <div>
    <ul v-for="item in items" :key="item.name">
      <!-- 在传递query参数的时候,需要使用v-bind绑定to属性,这时候to属性的参数就可以是一个对象了 -->
      <!-- 在这个对象中,path属性就是路由路径,query的值就是传递的参数 -->
    <!-- <router-link :to="{
      path:'/two/next/detail',
      query:{
        id:item.id
      }
    }"> -->
    <!-- 在使用params的形式传递参数的时候,可以用模板转换的方式进行参数的传递 -->
    <!-- 所谓模板转换就是在字符串中如果想插入变量,可以用双引号中使用模板符号,然后在需要引入变量的地方使用模板字符串 -->
  
    <!-- <router-link :to="`/two/next/detail/${item.id}`"> -->
    <!-- 在接受params参数的时候,除了可以使用模板语法,也可以使用对象语法 -->
  <router-link :to="{
    name:'detail',
    params:{
      id:item.id
    }
  }">
    {{item.id}}
  </router-link>
  </ul>
  <hr>
  <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: "router-next",
  data(){
    return{
      items:[
        {name:'张三',id:'001'},
        {name:'李四',id:'002'},
        {name:'王五',id:'003'}
      ]
    }
  }
}
</script>

<style scoped>

</style>

子路由组件中的内容:

<template>
    <div>
        <ul>
            <!-- 在父路由组件中传递参数,在子路由组件中接收的时候就需要使用一个属性:$route -->
            <!-- route属性保存的就是这个组件的路由信息,其中的query属性就是我们刚才传递的参数 -->
            <!-- id属性就是我们之前传递的时候在to中设置的参数名称 -->
            <!-- <li>用户ID:{{this.$route.query.id}}</li> -->

            <!-- 在使用params的形式传递参数的时候,需要将query参数换成params声明接受 -->
            <!-- 注意在接受参数的时候,要使用跟占位符一样的参数来接受 -->
            <li>{{this.$route.params.id}}</li>
        </ul>
    </div>
</template>

<script>
    export default{
        name:'Detail_demo',
        mounted(){
            console.log(this.$route);
        }
    }
</script>

<style scoped>

</style>

基本步骤:

1.首先定义一个用来显示接受参数的路由组件,然后在路由器文件中定义路由的地址

2.在父路由组件中定义跳转链接,并将to用v-bind指令绑定,并将to的值变成一个对象,设置name属性和params属性,其中的params属性就是我们要传递的参数

3.在显示接受参数的路由组件中用差值表达式,使用$route.params.参数的形式来接受参数

注意点:

在使用对象语法的方式写入参数的时候,只能使用name属性而不能使用path属性,并且声明接受的时候要是用params接受,最后的参数要和路由器文件中的占位符的名字保持一致

编程式导航

在我们之前进行导航之间的跳转的时候使用的是标签的形式,但是在有些时候,我们并不能使用标签,比如我们要是用一个按钮的形式来触发跳转的动作的时候,就需要使用到我们的编程式导航,简单来说,编程式导航就是在不使用标签的情况下完成路由的跳转:

父路由组件中的内容:

<template>
  <div>
    <ul v-for="item in items" :key="item.name">
      <!-- 在传递query参数的时候,需要使用v-bind绑定to属性,这时候to属性的参数就可以是一个对象了 -->
      <!-- 在这个对象中,path属性就是路由路径,query的值就是传递的参数 -->
    <!-- <router-link :to="{
      path:'/two/next/detail',
      query:{
        id:item.id
      }
    }"> -->
    <!-- 在使用params的形式传递参数的时候,可以用模板转换的方式进行参数的传递 -->
    <!-- 所谓模板转换就是在字符串中如果想插入变量,可以用双引号中使用模板符号,然后在需要引入变量的地方使用模板字符串 -->
  
    <!-- <router-link :to="`/two/next/detail/${item.id}`"> -->
    <!-- 在接受params参数的时候,除了可以使用模板语法,也可以使用对象语法 -->
  <!-- <router-link :to="{
    name:'detail',
    params:{
      id:item.name
    }
  }">
    {{item.id}}
  </router-link> -->
  
  <!-- 在之前的案例中,我们完成跳转都是在标签中完成的,而现在我们要在按钮中完成跳转动作的触发 -->
  <!-- 定义一个按钮,绑定一个点击事件,将数据参数传递进去 -->
  <button @click="change(item)">
    {{item.id}}
  </button>
  </ul>
  <hr>
  <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: "router-next",
  data(){
    return{
      items:[
        {name:'张三',id:'001'},
        {name:'李四',id:'002'},
        {name:'王五',id:'003'}
      ]
    }
  },
  methods:{
    // 在方法中定义这个参数,触发的对象就是router的push属性
    // 参数和之前to的参数是一样的,都有name,path,和传递参数的属性
    change(item){
      this.$router.push({
        name:'detail',
        params:{
        id:item.name
        }
      })
    }
  }
}
</script>

<style scoped>

</style>

编程式导航的区别无非就是将标签换成了按钮,然后将之前在to属性的值换到了与点击事件绑定的方法中,编程式导航的好处是将路由组件的跳转变得更方便了

最后一附一张最终效果的组织架构结构图:
Vue简单实例——路由2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153343.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!