zoukankan      html  css  js  c++  java
  • Vue-router 的练习

    使用了vue-cli 生成了一套webpack的模版。

    之后在其中练习 vue-router。

    以下是一些记录。

    1.动态路由的配置

    import Vue from 'vue'
    import Router from 'vue-router'
    // import HelloWorld from '@/components/HelloWorld'
    // import Hello from '@/components/hello'
    import Goodslist from '@/views/Goodslist'
    
    Vue.use(Router)
    
    export default new Router({
      // 路由模式 history,hash
      mode:'history'
      routes: [
        {
          path: '/goods/:goodsId/user/:name',
          name: 'Goodslist',
          component: Goodslist
        }
      ]
    })
    <!-- vue -->
    <!-- vue-router其实是对history的封装 -->
    <template>
        <div>
            <span>这是商品列表</span>
            <!-- 获取参数 -->
            <p>{{$route.params.goodsId}}</p>
               <p>{{$route.params.name}}</p>
        </div>
    </template>
    
    <script type="ecmascript-6">
        
    </script>
    
    <style rel="stylesheet">
        
    </style>

    访问方式:history是带着地址访问,hash则是用#来访问

    2.嵌套路由

      使用场景,菜单。

    <!-- Goodslist.vue -->
    <!-- vue-router其实是对history的封装 -->
    <template>
        <div>
            <span>这是商品列表</span>      
               
    
            <br>
            <!-- router-link 和 router-view 分别是两个封装好了的标签 
                 在使用嵌套路由的时候,我们需要在goods路由下 来设置 router-view来承载余下的两个页面
                 router-link 是 对a标签的封装 作用就是跳转
            -->
            <router-link to="/goods/title">进入标题</router-link>
            <router-link to="/goods/img">进入图片</router-link>
    
            <div>
                <router-view></router-view>
            </div>
        </div>
               
    </template>
    
    <script type="ecmascript-6">
        
    </script>
    
    <style rel="stylesheet">
        
    </style>
    <!-- Title.vue -->
    <template>
        <span>这是商品标题</span>
    </template>
    
    <script type="ecmascript-6">
        
    </script>
    
    <style rel="stylesheet">
        
    </style>
    <!-- Image.vue -->
    <template>
        <div>this is goods image</div>
    </template>
    
    <script type="ecmascript-6">
        
    </script>
    
    <style rel="stylesheet">
        
    </style>
    import Vue from 'vue'
    import Router from 'vue-router'
    // import HelloWorld from '@/components/HelloWorld'
    // import Hello from '@/components/hello'
    import Goodslist from '@/views/Goodslist'
    import Title from '@/views/Title'
    import Img from '@/views/Image'
    
    Vue.use(Router)
    
    export default new Router({
      // 路由模式 history,hash
      mode:'hash',
      routes: [
        {
          path: '/goods',
          name: 'Goodslist',
          component: Goodslist,
          // 使用嵌套路由
          // 一个数组,里面存的是对象,每个对象为一个组件
          children:[
              {
                  path:'title',
                  name:'title',
                  component: Title
              },
              {
                  path:'img',
                  name:'img',
                  component:Img
              }
          ]
        }
      ]
    })

    3.编程式路由

      顾名思义,就是通过写js代码来实现路由啦。

      使用的函数: $router.push("name") 或 $router.push({ path :"name "}) 

      在跳转的时候还可以加入传递的参数。

      $router.push({ path:"name?b=222"}) 或 $router.push({path:'name' ,query:{a:111}})

      还可以使用 

      $router.go(1) //类似于 history()

      

      

    <!-- vue -->
    <!-- vue-router其实是对history的封装 -->
    <template>
        <div>
            <span>这是商品列表</span>      
               
    
            <br>
            <!-- router-link 和 router-view 分别是两个封装好了的标签 
                 在使用嵌套路由的时候,我们需要在goods路由下 来设置 router-view来承载余下的两个页面
                 router-link 是 对a标签的封装 作用就是跳转
            -->
            <router-link to="/goods/title">进入标题</router-link>
            <router-link to="/goods/img">进入图片</router-link>
    
            <div>
                <router-view></router-view>
            </div>
            <router-link to="/cart">前往购物车</router-link>
            <button @click='jump'>btn跳转</button>
        </div>
               
    </template>
    
    <script type="ecmascript-6">
        export default{
            methods:{
                jump(){
                    this.$router.push({path:'/cart?goodsId=333'})
                }
            }
        }
    </script>
    
    <style rel="stylesheet">
        
    </style>
    <!-- vue -->
    <template>
        <div>
            this is cart page
            <p>
                <span>{{$route.query.goodsId}}</span>
            </p>
        </div>
    </template>
    
    <script type="ecmascript-6">
        
    </script>
    
    <style rel="stylesheet">
        
    </style>

    这次在cart页面接受参数使用的是query 而不是之前动态路由的 params那是因为

    query是页面之间传递参数时候用的 而 params是组件之间传递参数用的。

  • 相关阅读:
    leetcode 33. Search in Rotated Sorted Array
    leetcode 32. Longest Valid Parentheses
    leetcode 28. Implement strStr()
    leetcode 27. Remove Element
    leetcode 26. Remove Duplicates from Sorted Array
    leetcode 24. Swap Nodes in Pairs
    leetcode 22. Generate Parentheses
    树莓派的频率管理和热控制
    sql执行insert插入一条记录同时获取刚插入的id
    全程直播个人博客重构过程,采用springboot+dubbo+jpa技术栈。
  • 原文地址:https://www.cnblogs.com/Let7/p/7711749.html
Copyright © 2011-2022 走看看