• VUE 组件通信总结


    1.prop 父组件传递给子组件,即通过VUE本身具有的Props属性来传递值

    Child组件

    <template>
      <span>{{message}}</span>
    </template>
    <script>
    export default {
      props: ['message'],
      data () {
        return {}
      }
    }
    </script>

    Father组件

    <template>
        <div>
            <child message='via props'></child>
        </div>
    </template>
    <script>
    import child from './child'
    export default {
        components: {
            child
        }
    }
    </script>  

    运行结果

     2.非Prop传递数据

    Child

    <template>
      <span @click="getData()">{{message}}</span>
    </template>
    <script>
    export default {
      props: ['message'],
      data () {
    return {} },   methods: {     getData () {       console.log(this.$el.attributes.noprop.value)     }   } } </script>

    Father

    <template>
      <div>
        <child noProp='not via props' message='via props'></child>
      </div>
    </template>
    <script>
    import child from './child'
    export default {
      components: {
        child
      }
    }
    </script>

    运行结果

     3.v-on v-emit 子组件传给父组件

    Child

    <template>
      <span @click="emitTest()">{{message}}</span>
    </template>
    <script>
    export default {
      props: ['message'],
      data () {
        return {}
      },
      methods: {
        emitTest () {
          console.log('This is children"s message')
          this.$emit('onTest', '123')
        }
      }
    }
    
    </script>

    Father

    <template>
      <div>
        <child v-on:onTest='onTestFunc' message='via props'></child>
      </div>
    </template>
    <script>
    import child from './child'
    export default {
      components: {
        child
      },
      methods: {
        onTestFunc (id) {
          console.log('This is father"s message' + id)
        }
      }
    }
    </script>

    运行结果

    4.vue实例作为事件总线,非父子组件通信

     

    5.Vuex

    https://cn.vuejs.org/v2/guide/state-management.html

    6.作用域插槽

    child

    <template>
      <div>
        <slot message="This is a children message"></slot>
      </div>
    </template>
    <script>
    export default {
    }
    </script>

    Father

    <template>
      <div>
        <child>
          <template scope="scope">{{scope.message}}</template>
        </child>
      </div>
    </template>
    <script>
    import child from './child'
    export default {
      components: {
        child
      }
    }
    </script>

    运行结果

    7.$parent,$children

    $children,即在父组件中,可以利用this.$children[x]来访问子组件的data属性,如果你觉得按数组当有多个子组件时难以维护,也可以用$ref,

    首先你的给子组件做标记。demo <firstchild ref="one"></firstchild>

          然后在父组件中,通过this.$refs.one就可以访问了这个自组件了,包括访问自组件的data里面的数据,调用它的函数

    Child

    <template>
      <div></div>
    </template>
    <script>
    export default {
      data () {
        return {
          childMsg: 'this is a child msg'
        }
      }
    }
    </script>

    Father

    <template>
      <div>
        <child></child>
      </div>
    </template>
    <script>
    import child from './child'
    export default {
      components: {
        child
      },
      mounted () {
        console.log(this.$children[0].childMsg)
    }
    }
    </script>

    $parent

    Child

    <template>
      <div></div>
    </template>
    <script>
    export default {
      mounted () {
        console.log(this.$parent.fatherMsg)
      }
    }
    </script>

    Father

    <template>
      <div>
        <child></child>
      </div>
    </template>
    <script>
    import child from './child'
    export default {
      components: {
        child
      },
      data () {
        return {
          fatherMsg: 'this is a fatherMsg'
        }
      }
    }
    </script>

  • 相关阅读:
    学习总结:CSS(二)块级与行级元素特性、盒模型、层模型、BUG与BFC、浮动模型
    学习总结:CSS(一)定义方式、选择器、选择器权重
    html基础知识总结
    js学习总结:DOM节点二(dom基本操作)
    Javascript的作用域和闭包(一)
    js学习总结:DOM节点一(选择器,节点类型)
    jQuery源码解析对象实例化与jQuery原型及整体构建模型分析(一)
    正则表达式基于JavaScript的入门详解
    JavaScript深度克隆(递归)
    电子警察【思想】
  • 原文地址:https://www.cnblogs.com/Darlietoothpaste/p/7718466.html
Copyright © 2020-2023  润新知