美文网首页
Vue01组件化实践-01组件通信

Vue01组件化实践-01组件通信

作者: v雪狐v | 来源:发表于2020-07-01 11:41 被阅读0次

组件通信常用方法

以下demo github地址: feature/communication分支

  • props
<!-- Child.vue -->
  <template>
      <div>
          <p>{{msg}}</p>
      </div>
  </template>
  <script>
  export default {
     // props: ['msg'],    //基本用法
    props: {
        msg: {
              type: String,
              //required: true,  // 默认false,是否必传  必传自然就没有default
              default: ""  
        }
    }
  }
  </script>
<!-- Parent.vue -->
  <template>
      <Child msg='from parent to child message'></Child>
  </template>
  <script>
  import Child from './Child.vue'
  export default {
        components: {
            Child
        }
    }
  </script>
  • $emit / $on ( 发布/订阅)
<!-- Child.vue -->
<template>
  <div>
    <p>Child1.vue</p>
    <input type="text" v-model="val" @input="handleInput">
  </div>
</template>
<script>
  export default {
    data() {
      return {
        val : ""
      }
    },
    mounted() {
      this.handleInput();
    },
    methods : {
      handleInput () {
        this.$emit('emitEvent', this.val)
      }
    }
  }
</script>
<!-- Parent.vue -->
    <template>
        <div>
            <Child @emitEvent="getFromChild"></Child>
            <p>从child订阅的值:{{val}}</p>
        </div>
    </template>
    <script>
    import Child from './Child.vue'
    export default {
         components: {
              Child
        },
        data() {
            return {
                val : "",
            }
        },
        methods: {
              getFromChild(args){
                  this.val = args;
              }
        }
    }
   </script>
  • event bus (总线 --> $emit / $on)
//main.js
Vue.prototype.$bus = new Vue();  //注册全局的bus 
//Bus.vue
<template>
  <div>
    <Bus1></Bus1>
    <Bus2></Bus2>
  </div>
</template>
<script>
  import Bus1 from "../components/module/Bus1";
  import Bus2 from "../components/module/Bus2";
  export default {
    components: {
      Bus1,
      Bus2
    }
  };
</script>
//Bus1.vue
<template>
  <div>
    <p>Bus1</p>
    <input type="text" v-model="inputVal" />
    <button @click="handleAddBusVal">Bus1发布</button>
  </div>
</template>

<script>
  export default {
    mounted(){
      this.$nextTick(()=>{
        this.handleAddBusVal();
      })
    },
    data() {
      return {
        inputVal: 'Event Bus1 message to Bus2'
      }
    },
    methods: {
      handleAddBusVal() {
        this.$bus.$emit('addBusVal',this.inputVal);
      }
    },
  };
</script>
// Bus2.vue
<template>
  <div>
    <p>Bus2</p>
    <p>{{busVal}}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        busVal: '2222'
      };
    },
    mounted() {
      this.$bus.$on('addBusVal',target=>{
        this.busVal = target
      });
    }
  };
</script>

相关文章

  • Vue01组件化实践-01组件通信

    组件通信常用方法 以下demo github地址: feature/communication分支 props $...

  • 组件通信注解框架实践

    组件通信注解框架实践 目录介绍 01.为何需要组件间通信 02.实现同级组件通信方式 03.先看一个简单的案例 0...

  • Vue01组件化实践-02组件通信边界情况

    组件通信边界情况 demo github地址:feature/communicationOther 分支 $par...

  • OC底层面试题-组件化通信(下)

    上篇我们知道了如何创建组件化项目,这篇我们来聊聊组件化的重点:组件化通信 组件化通信方法 目前所了解的主流方式有一...

  • iOS组件化实践(基于CocoaPods)

    iOS组件化实践(基于CocoaPods) iOS组件化实践(基于CocoaPods)

  • vue组件化思想

    组件化 组件化是vue的核心思想,主要是为了代码重用。 组件通信 父组件=>子组件 属性props 引用refs ...

  • iOS:组件化的三种通讯方案

    组件化 本文主要介绍组件化常用三种通讯方式. 常⽤的三种组件化通讯方案 组件化通信方案组件化最重要的是兄弟模块的通...

  • 组件通信

    组件通信分为几种: 父组件给子组件通信 子组件给父组件通信 兄弟组件通信 1.父组件给子组件通信 法一...

  • 组件化方案

    组件化方案引用 在现有工程中实施基于CTMediator的组件化方案 iOS组件化实践(一):简介 iOS组件化实...

  • vue中的组件通信

    一、组件通信(组件传值) 1.1父子组件通信 1.2子父组件通信 1.3非父子组件通信(兄弟组件通信)

网友评论

      本文标题:Vue01组件化实践-01组件通信

      本文链接:https://www.haomeiwen.com/subject/jhlfqktx.html