美文网首页
Vue 父子组件通信

Vue 父子组件通信

作者: 苦瓜_6 | 来源:发表于2018-09-26 20:18 被阅读0次

父组件给子组件传递数据

  • 在组件中动态绑定(如果只想传递一个静态的prop ,可以不绑定,如下)要传递的数据
    <child msg= "这里是你要传给子组件的数据" class="child"> 
  • 在子组件中使用 props 选项去接收来自父组件传递过来的数据
    完整代码如下:
  <div id="father">
    <label for="msg">
      在下面输入框中输入内容可以改变爸爸的 message:
    </label> <br>
    <input id="msg" type="text" v-model="message">
    <hr>
    <child v-bind:msg= "message" class="child"> 
    <!-- 通过 v-bind 动态赋值 -->
    </child>
  </div>
   
  <script>
    let child = {
      template: `<div>
      <p>下面是来自爸爸的信息:</p>
      <p>{{ msg }}</p>
    </div>`,
      props: ['msg']
    }
    let father = new Vue({
      el:'#father',
      components: { child }, // 注册子组件
      data: {
        message: 'message from father'
      }
    })
  </script>
image.png
关于props
  • 可以使用v­-bind动态绑定父组件来的内容
  • 在组件中使用props来从父组件接收参数,注意,在props中定义的属性,都可以在子组件中直接使用
  • props来自父级,而组件中data return的数据就是组件自己的数据,两种情况作用域就是组件本身,可以在template,computed,methods中直接使用
  • props的值有两种,一种是字符串数组,一种是对象
  • 对于数组或对象类型的 prop 来说,在子组件中改变这个对象或数组本身将会影响到父组件的状态(尽可能将父子组件解耦,避免子组件无意中修改了父组件的状态)

子组件给父组件传递数据

自定义事件

子组件用 $emit() 来触发事件 ,父组件用 v-on来 监听子组件的事件 。

第一步:自定义事件
第二步: 在子组件中用$emit触发事件。第一个参数是事件名,后边的参数是要传递的数据
第三步:在自定义事件中用一个参数来接收

下面通过一个简单的例子(在子组件中更新积分,在父组件中显示最终积分)来了解子传父的流程。点这里预览

  • 在父组件中定义 自定义事件update-data
    <div id="app">
      <h4>我是父组件 </h4>
      <p>目前积分是: {{ data }}</p>
      <hr>
      <son-component @update-data="update" > </son-component>
    <!-- v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以推荐始终使用 kebab-case 的事件名 -->
   </div>
  • 在子组件中用$emit触发事件,并传入一个值
 add: function () {
              this.count += 10;
              this.$emit('update-data', this.count);
            //  事件名不存在任何自动化的大小写转换,而是触发的事件名需要完全匹配监听这个事件所用的名称,所以这里仍旧是'update-data'
            },
  • update-data 事件触发后,会执行父组件的 update 函数,从而更新当前积分

在组件中使用 v-model

一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件。

还是上面的例子,不同的是使用v-model实现

删掉我们的自定义事件,改用v-model :

  <son-component v-model="data" > </son-component>

数据改变时emit 一个 input 事件

  reduce: function () {
              this.count -= 10;
              this.$emit('input', this.count)
            }

所以 v-­model 其实是一个语法糖,这背后其实做了两个操作:

  • v-­bind 绑定一个 value 属性
  • v-­on 指令给当前元素绑定 input 事件

完整demo在这里

相关文章

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • vue2中eventbus遇到的坑

    前言 vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数...

  • Vue事件总线(EventBus)使用详细介绍

    前言 vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数...

  • Vue事件总线(EventBus)

    vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过props向下传数据给子组件...

  • VUE - EventBus

    vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数据给子...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • 09-生命周期及非父子组件间的通信

    一. Vue生命周期 二、生命周期代码 三、非父子组件通信 vue中非父子组件通信需要借助一个空的vue实例,案...

  • Vue组件通信

    Vue 组件之间的通信,通常我们遇到的都是父子组件之间的通信 一、父子组件传参 子组件定义 Props 属性; 父...

网友评论

      本文标题:Vue 父子组件通信

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