zoukankan      html  css  js  c++  java
  • vue组件间的通信

    父子组件之间的传值

      子组件向父组件传值时,在子组件内部添加事件,当事件触发时进行数据操作,在事件处理函数中通过$emit触发父组件的自定义事件,实质上是子组件的事件触发后会触发父组件的自定义件,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。父组件向子组件传值利用props自定义一个属性,将需要传递的数据赋值给该属性,子组件就可以接收到数据。
    总结:父子组件之间的传值都是通过对一个媒介,父传子是通过子组件定义的属性,子传父是通过父组件的自定义事件

        <div id="app">
          <p>{{ sum }}</p>
          <button-counter :title='msg' @add='changeSum'></button-counter>
          <button-counter @add='changeSum'></button-counter>
        </div>
    
        Vue.component ('button-counter', {
          template: `<button @click='clickHandel'>{{ this.count }}</button>`,
          data () {
            return {
              count: 0
            }
            props: ['title']
          },
          methods: {
            clickHandel () {
              this.count ++,
              this.$emit('add')
                console.log(this.title)
            }
          }
        })
          new Vue ({
            el: '#app',
            data () {
              return {
                sum: 0
              }
            },
            methods: {
              changeSum () {
                this.sum ++
              }
            }
          })
    
    非父子组件之间的传值(在一个组件中通过$on监听一个自定义事件,在另一个组件中通过$emit 触发该自定义事件,并传递参数数据)在简单的场景下,可以使用一个空的 Vue 实例作为事件总线:
    // bus.js
    import Vue from 'vue'
    var bus = new Vue()
    export default bus
    // module.exports = bus
    

    两个非父子组件

    // A
    <template>
        <div>
            <button @click="sendToB">toB</button>
        </div>
    </template>
    
    <script>
    import Bus from './bus'
    export default {
        methods:{
            sendToB: function () {
                Bus.$emit('toBFlag','hello')
            }
        }
    
    }
    </script>
    
    <style>
    
    </style>
    
    
    // B
    <template>
      
    </template>
    
    <script>
    import Bus from './bus'
    export default {
      created: function () {
          Bus.$on('toBFlag',function (data) {
              console.log(data)
          })
      }
    }
    </script>
    
    <style>
    
    </style>
    
    
  • 相关阅读:
    leetcode 152. 乘积最大子序列
    leetcode 258. 各位相加 (python)
    leetcode 89. 格雷编码
    leetcode 62. 不同路径(C++)
    leetcode 142. 环形链表 II(c++)
    https证书制作及springboot配置https
    SpringBoot RestTemplate接收文件,并将文件发送到另外一个程序进行存储
    批量停止、删除docker容器
    记录Redis连接未正确释放,TCP连接过多,造成服务器上部分功能不可用和linux服务器内存一直增加问题
    外部连接mysql docker容器异常
  • 原文地址:https://www.cnblogs.com/muqiao/p/8524534.html
Copyright © 2011-2022 走看看