Vue.js中的router基础(动态、传参、接参、编程式导航 )

简介: Vue.js中的router基础(动态、传参、接参、编程式导航 )

前面是router的一级和二级路由,下面是路由里稍微复杂一点的东西:路由的动态,传参,接参。


这些个我们通过寺库网的分类页和分类页中每个类的详情的数据来做


寺库网:https://m.secoo.com


按照前面的,先配置好前面一篇的一级路由,但是稍微名字有些更改如下:

动态路由、路由传参:

1.先配置跨域方法:反向代理

  • 在根目录建立vue.config.js文件,这个文件等价于webpack里的webpack.config.js
  • 下载axios数据请求包
cnpm i axios -S
  • 在vue.config.js里配置跨域
module.exports= {
    devServer : {
        proxy : {
            //分类页的数据代理
            '/siku' : {//标记
                target : 'https://android.secoo.com',
                changeOrigin : true,
                pathRewrite : {
                    '^/siku' : ''//作用在真实地址中去掉标记
                }
            },
            //详情页数据代理,由于这个做了反跨域,所以后面没用上,本应该在List.vue里使用的
            '/msiku': {
                target: 'https://m.secoo.com',
                changeOrigin: true,
                pathRewrite: {
                '^/msiku': ''
        }
      }
        }
    }
}

2.配置Category.vue这个组件

  • 在 Category .vue组件里使用标记为/siku的跨域方案获取分类数据请求
<script>
export default {
  data () {
    return {
      category: null
    }
  },
  created () {
     this.$http.get('/siku/appservice/cartAndBrand.action',{//这里的/siku会自动匹配到对应的vue.config.js里的target
        params: {//这里面是接口数据里?后的内容参数
          v: 2.0,
          _: Date.now(),
          callback: 'jsonp1'
        }
      })
        .then( res => {
          this.category  = JSON.parse(res.data.slice(7,-1)).rp_result.categorys
        })
        .catch( error => console.log( error ))
  }
}
</script>
<template>
  <div>
    <div class="category-box">
      <div 
        v-for = "item in category"
        :key = "item.value"
        class="food-box"
      >
        <h3> {{ item.name + item.enName }} </h3>
        <ul>
          <li 
            v-for = "category in item.child"
            :key = "category.value"  
          >
            <!-- 路由的传参 -->
            <router-link
              :to = "{name: 'list',params: { id: category.value},query: {keyword: category.name}}"
            >
              {{ category.name }}
            </router-link>
          </li>
        </ul>
      </div>
    </div>
    <div>
      <router-view></router-view>
    </div>
  </div>
</template>

可能样子有点丑来点css

<style lang="stylus" scoped>
  $color = 'red'
  .food-box 
    ul
      list-style none
      display flex
      justify-content space-around
      flex-wrap wrap
      padding 0
      li 
        padding 10px
</style>

最后出来个这么个鬼东西,有点丑,接下来是每个分类的详细了


3.再进一步配置一下index.js文件


让List.vue作为每个分类详情的组件

需要导入list.vue


import List from '../components/pages/List.vue'

路由表下的Cayegary下增加List的路由

{
      path : '/category',
      component : Category
},
{
      path : '/list/:id',
      component : List,
      name : 'list'
}

路由接参:

路由接参需要移步到List.vue组件里

<template>
  <div>
    <button @click = 'goCategory'>
      返回
    </button>
    <p>
      <!-- 通过$route接收前面传递过来的参数 -->
      id: {{ this.$route.params.id }}
    </p>
    <p>
      query: {{ this.$route.query.keyword }}
    </p>
  </div>
</template>

编程式导航

其后那个返回按钮设计到编程式导航

知识点(挂在了$router上):

push

this.$router.push('/home')

this.$router.push({name,params,query})

push可以将我们的操作存放到浏览器的历史记录

replace

this.$router.replace('/home')

this.$router.replace({name,params,query})

replace没有将我们的操作存放到浏览器的历史记录, 效果为返回了二级

<script>
export default {
    methods :{
        goCategory () {
            console.log(this.$router)//这上面挂载了以下方法
            /*
               push
            */
           //this.$router.push('./home')//结果跳到首页后,详情页的路由展示区域还在
           //this.$router.push('./category')//同样路由展示区域还在
           //    this.$router.push({//同样路由展示区域还在
           //        name : 'list',
           //        /* params,
           //        query */
           //})
           /*replace */
            // this.$router.replace('/login')//正常
            this.$router.replace({
            path : '/category'
            })//正常
            /*
              history的forward,go,back都可以
            */
        }
    }
}
</script>

http://www.root181.com


相关文章
|
2月前
|
存储 JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果+1
JavaScript编程实现tab选项卡切换的效果+1
|
20天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包:解锁编程潜能,释放你的创造力
【10月更文挑战第25天】本文深入探讨了JavaScript中的闭包,包括其基本概念、创建方法和实践应用。闭包允许函数访问其定义时的作用域链,常用于数据封装、函数柯里化和模块化编程。文章还提供了闭包的最佳实践,帮助读者更好地理解和使用这一强大特性。
12 2
|
24天前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
30 3
|
28天前
|
缓存 JavaScript 搜索推荐
Vue Router 导航钩子的使用场景
【10月更文挑战第13天】
13 1
|
28天前
|
JavaScript 搜索推荐 数据处理
Vue Router 导航钩子
【10月更文挑战第17天】需要注意的是,过度使用导航钩子可能会导致代码复杂度增加,因此需要合理规划和使用。此外,不同的钩子在不同的场景下具有不同的作用,需要深入理解其特点和用法,才能更好地发挥它们的价值。可以在实际项目中结合具体需求,充分利用这些导航钩子来打造更加智能、灵活的路由导航机制。
16 1
|
1月前
|
JavaScript UED 开发者
Vue中的导航守卫有哪三种?分别有什么作用
Vue中的导航守卫有哪三种?分别有什么作用
|
2月前
|
JavaScript 网络架构
|
1月前
|
JavaScript
Vue路由传参实战指南:三种常用方法示例演示
Vue路由传参实战指南:三种常用方法示例演示
85 0
|
1月前
|
JavaScript 前端开发
vue尚品汇商城项目-day01【7.路由传参】
vue尚品汇商城项目-day01【7.路由传参】
30 0
|
1月前
|
JavaScript API 数据安全/隐私保护
vue尚品汇商城项目-day05【36.导航守卫理解】
vue尚品汇商城项目-day05【36.导航守卫理解】
28 0