路由传参(2018/11/26)

一、路由传参
    思路:
新建一个vue项目------>cnpm i axios --save  ------->在文件路径下新建一个文件夹 hd------>写一个json文件------>在hd目录下进入CMD     json-server 文件名.json------>进入main.js  import axios from “axios”  vue.prototype.$http=axios------->新建一个all.vue  (用途:获取数据 )------>router中的index.js 引入组件  设定路由的路径------>App.vue  设置组件跳转的链接
 
        路由的写法  path: "/路径/:参数"
 
        获取参数     this.$route.params.参数   //这里的参数就是data.json中的数组名
 
        
        $router    //是导出的总体对象  所有的路由对象
        $route     //是导出的总体对象中的某一项  某一个路由对象
 
all.vue
 
<template>
   <div>
       <ul>
          <li v-for='item in list'>
              <span  v-for='(value,key,index) in  item'>{{key}}:{{value}}</span> //  4)   方法一  循环遍历对象  
              //<span  v-if="type==='list'">{{item.name}}</span>   // 方法二  如果想单独显示list中的某一项则可以用 v-if v-else的形式来进行判断然后取需要的值
             // <span  v-else>{{item.brand}}</span>
          </li>
       </ul>
   </div>
</template>
<script>
   export default{
       data(){
          return{
              list:[]  // 3)将数据传到list中
             
          }
      },
       watch:{ //  1)监控路径的变化
          $route:{
              handler(n){     // n相当于this.$route
                 this.type=n.params.type;  //①先获取到最新的参数
                 this.getData()   //②然后调用获取数据的方法
              },
              immediate:true //必须是true。否则加载组件之后不会执行getData
          }
       },
       methods:{
          getData(){  //2)根据变化的路径获取数据
             this.$http.get("http://localhost:3000/"+this.type).then((res)=>{
                 this.list=res.data
                 console.log(res)
              })
          }
       }
   }
</script>
 
index.js
 
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from  '@/components/HelloWorld'
import All from '@/components/all'
Vue.use(Router)
export default new Router({      
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
       path:'/all/:type', /*    ":"后面的是参数,可以自定义    */
       component:All
    }
  ]
})
 
 
App.vue
 
<template>
  <div id="app">
    <router-view/>
    <router-link  to="/all/list">list</router-link>   //这里的/list实际上是在给index.js中的 path:“/all/:type” 中的type赋值
    <router-link  to="/all/computer">computer</router-link>
  </div>
</template>
 
 
二、编程式导航
 
this.$router.push({'name':'all',params:{type:type},query:{a:2,b:3}})  //设置参数
this.$route.query.参数名     //取到query中的参数
APP.vue
 
<template>
  <div id="app">
    <router-view/>
   <button @click="go('list')">用户列表</button>    //利用按钮进行数据切换 
   <button @click="go('computer')">电脑列表</button>
  </div>
</template>
<script>
export default {
  name: 'App',
  methods:{
   go(type){ 
       this.$router.push('/all/'+type);   //push()用于页面跳转
        // this.$router.push({path:'/all/'+type})
      //  this.$router.push({'name':'all',params:{type:type}})
   }
  }
   
}
</script>
 
三、路由的两种模式
           mode:“hash”  //路径中带#  (默认)
            mode:“history” //路径中不带#
            设置在index.js中
    
 
    
posted @ 2019-09-12 10:35  zsrTaki  阅读(176)  评论(0编辑  收藏  举报