zoukankan      html  css  js  c++  java
  • 路由组件的传参

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
      <!-- 
        如果某个route上写了props: true属性,那么对应的路由组件上就会多出来一个属性
        {
          path: '/demo/:a',
          component: demo,
          props: true
        }
    
        相当于
        <demo v-bind="$route.params"></demo>
        又相当于
        <demo :id="$route.params.id"></demo>
    
        如果给路由对象上添加props等于true则对应的路由组件里就可以接收props
        props: {
          params参数: 数据类型
        }
    
    
    
        如果路由对象上的props是对象,则会按照原样添加给路由组件
        {
          path: '/',
          component: demo,
          props: {a: 1, b: 2, c: 3}
        }
    
        相当于
        <demo v-bind="{a: 1, b: 2, c: 3}"></demo>
        又相当于
        <demo :a="1" :b="2" :c="3"></demo>
    
        所以可以在demo组件中设置prop接收a b c三个值
    
    
    
        1 如果props是true
          则将route.params添加到组件上
          <com v-bind="route.params"></com>
    
        2 如果props是对象
          则将这个对象原样添加到组件上
          <com v-bind="props"></com>
    
        3 如过props是函数 (一般返回值为对象)
          则将这个函数的返回值添加到组件上
          <com v-bind="props返回值"></com>
      
        <com v-bind="{key:value}"></com>
        <com :key="value"></com>
    
        最终就可以在组件中设置props用于接收这些属性值
    
        这个不是新的功能,而是为了解耦提出的新的写法
       -->
      <div id="app">
        <router-view></router-view>
      </div>
      <script src="../vue.js"></script>
      <script src="../vue-router.js"></script>
      <script>
        const com = {
          template: `
            <div>组件</div>
          `,
          props: {
            id: String,
            // a: Number, 
            // b: Number,
            // c: Number,
            // query: Object
            a: String, 
            b: String,
            c: String,
          },
          created () {
            this.getData()
          },
          methods: {
            getData () {
              // console.log(this.$route.params.id)
              console.log(this.id)
              console.log(this.a, this.b, this.c)
              console.log(this.query)
            }
          }
        }
    
        const router = new VueRouter({
          routes: [
            {
              path: '/:id',
              component: com,
              // props: true
              /* props: {
                a: 1,
                b: 2, 
                c: 3
              } */
              props: (route) => {
                return route.query
              }
            }
          ]
        })
    
        const app = new Vue({
          el: '#app',
          router
        })
      
      </script>
    </body>
    </html>
  • 相关阅读:
    POJ_2184_Cow_Exhibition_(动态规划,背包)
    POJ_2392_Space_Elevator_(动态规划,背包)
    POJ_2914_Minimum_Cut_(Stoer_Wagner)
    POJ_3068_Shortest_pair_of_paths_(最小费用流)
    POJ_3666_Making_the_Grade_(动态规划)
    BZOJ_1565_[NOI2009]_植物大战僵尸_(Tarjan+最大流+最大权闭合图)
    POJ_2987_Firing_(最大流+最大权闭合图)
    BZOJ_1497_[NOI2006]_最大获利_(最大流+最大权闭合图)
    BZOJ_1798_&_Codevs_2216_[AHOI_2009]_行星序列_(线段树)
    Codevs_1690_开关灯_(线段树)
  • 原文地址:https://www.cnblogs.com/bao2333/p/10278917.html
Copyright © 2011-2022 走看看