Vue组件传参详解

一、props / $emit

父组件通过props的方式向子组件传递数据,而通过$emit 子组件可以向父组件通信。

1. 父组件向子组件传值

下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中如何获取父组件section.vue中的数据articles:[‘红楼梦’, ‘西游记’,‘三国演义’]

// section父组件




// 子组件 article.vue



总结: prop 只可以从上一级组件传递到下一级组件(父子组件),即所谓的单向数据流。而且 prop
只读,不可被修改,所有修改都会失效并警告。


2. 子组件向父组件传值

对于$emit 我自己的理解是这样的: $emit绑定一个自定义事件, 当这个语句被执行时, 就会将参数arg传递给父组件,父组件通过v-on监听并接收参数。 通过一个例子,说明子组件如何向父组件传递数据。
在上个例子的基础上, 点击页面渲染出来的ariticle的item, 父组件中显示在数组中的下标

// 父组件中






二、 $children / $parent

Vue组件传参详解_第1张图片

上面这张图片是vue官方的解释,通过 p a r e n t 和 parent和 parentchildren就可以访问组件的实例,拿到实例代表什么?代表可以访问此组件的所有方法和data。接下来就是怎么实现拿到指定组件的实例

使用方法

// 父组件中



// 子组件中



要注意边界情况,如在#app上拿 p a r e n t 得 到 的 是 n e w V u e ( ) 的 实 例 , 在 这 实 例 上 再 拿 parent得到的是new Vue()的实例,在这实例上再拿 parentnewVue()parent得到的是undefined,而在最底层的子组件拿 c h i l d r e n 是 个 空 数 组 。 也 要 注 意 得 到 children是个空数组。也要注意得到 childrenparent和 c h i l d r e n 的 值 不 一 样 , children的值不一样, childrenchildren 的值是数组,而$parent是个对象

总结 上面两种方式用于父子组件之间的通信, 而使用props进行父子组件通信更加普遍; 二者皆不能用于非父子组件之间的通信。


最近忙着准备面试,等忙完后续会坚持每天更新一次,总结每一天收获的新知识和新理解~

尊重原创,原文链接:https://juejin.im/post/5d267dcdf265da1b957081a3

你可能感兴趣的:(Vue组件传参详解)