zoukankan      html  css  js  c++  java
  • vue中父子间传值和非父子间传值

    vue传值一般分三种方式:父组件向子组件传值、子组件向父子间传值、非父子组件进行传值

      一、父组件向子组件传值:父组件引用子组件后,通过数据绑定(v-bind)向子组件传值

          父组件:

    <template>
      <div>
        <h1>父组件</h1>
        <router-view v-bind:fatherData="data"></router-view>
      </div>
    </template>
     
    <script>
    export default {
      data () {
        return {
          data: '父组件数据data'
        };
      }
    }
    </script> 

        子组件:把父组件传递过来的数据, 在 props数组 中定义一下,使用prop中接收的数据

    <template>
      <div>
        <h1>子组件</h1>
        <p>父组件数据:{{fatherData}}</p>
      </div>
    </template>
      
    <script>
    export default {
      props: ['fatherData'],
      data () {
        return {
      
        };
      }
    }
    </script>

      二、子组件向父组件传值:子组件通过事件向父组件传值,通过$emit  触发将子组件的数据当做参数传递给父组件

        父组件:

    <template>
      <div>
        <h1>父组件</h1>
        <router-view @show="showFather"></router-view>
      </div>
    </template>
     
    <script>
    export default {
      data () {
        return {
          sonData: '',
          sonData2: ''
        };
      },
      methods: {
        showFather (val1, val2) {
          this.sonData = val1;
       
    this.sonData = val2;
        console.log(
    '子组件的值'+a+'=========='+b);
        }
      }
    }
    </script>

        子组件:

    <template>
      <div>
        <h1>子组件</h1>
        <Button type="primary" @click="sonClick">像父组件传值</Button>
      </div>
    </template>
     
    <script>
    export default {
      data () {
        return {
          sonData1: '子组件第一个数据',
          sonData2: '子组件第二个数据'
        };
      },
      methods: {
        sonClick () {
          this.$emit('show', this.sonData1, this.sonData2);
        }
      }
    }
    </script>

      三、非父子组件进行传值:非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果。

        bus.js

    //bus.js
    import Vue from 'vue'
    export default new Vue()

        组件A:

    <template>
      <div>
        A组件:
        <span>{{elementValue}}</span>
        <input type="button" value="点击触发" @click="elementByValue">
      </div>
    </template>
    <script>
      // 引入公共的bug,来做为中间传达的工具
      import Bus from './bus.js'
      export default {
        data () {
          return {
            elementValue: 4
          }
        },
        methods: {
          elementByValue: function () {
            Bus.$emit('val', this.elementValue)
          }
        }
      }
    </script>

        组件B:

    <template>
      <div>
        B组件:
        <input type="button" value="点击触发" @click="getData">
        <span>{{name}}</span>
      </div>
    </template>
    <script>
      import Bus from './bus.js'
      export default {
        data () {
          return {
            name: 0
          }
        },
        mounted: function () {
          var vm = this
          // 用$on事件来接收参数
          Bus.$on('val', (data) => {
            console.log(data)
            vm.name = data
          })
        },
        methods: {
          getData: function () {
            this.name++
          }
        }
      }
    </script>
  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/dinghaoran/p/11771382.html
Copyright © 2011-2022 走看看