看了很多文章,官网文档也有看,对父子组件通信说的不是很明白;决定自己总结一下;

vue一般都使用构建工具构建项目;这样每个组件都是单文件组件;而网上很多文章都是script标签方式映入vue,组件通信也是在一个文件中进行;

单文件组件形成的父子关系组件之间的通信的文章还没看到 。看到掘金和博客园的两篇文章决定自己写一个单文件组件之间通信

一般来说想比较少的数据可以通过事件发射和属性传递来形成数据的传递。

下面上代码;

1:父到子组件通信

//父组件通过标签上面定义传值
<template>
<Main :obj="data"></Main> //这个是子组件 绑定属性
</template>
<script>
//引入子组件
import Main form "./main" exprot default{
name:"parent",
data(){
return {
data:"我要向子组件传递数据"
}
},
//初始化组件
components:{
Main
}
}
</script> //子组件通过props方法来接收数据 这里props可以写成对象形式
props:{
type:'' //规定传递值的类型
default:'' //默认值
} <template>
<div>{{data}}</div> //这是父组件传递过来的数据
</template>
<script>
exprot default{
name:"son",
//接受父组件传值
props:["data"]
}
</script>

2:子组件到父组件

//子组件 Child
<template>
<button @click='sendmsg'>sendmsg</button> //子组件绑定事件 </template> <script> export default {
data(){
return {
info:'this is a msg' //这是需要传递的数据
}
},
methods:{
sendmsg(){
this.$emit('info',this.info); //发射info事件
}
}
}
</script> //父组件 <template>
<div>
<Child @info='get'></Child> //监听子组件emit过来的事件
</div>
</template> <script>
import Child from './child' export default {
data(){return {
msgPrent:'hellos'
}},
methods:{
get(msg){
this.msgPrent = msg
}
} }
</script>

  

参考文章链接:

https://www.cnblogs.com/yesyes/p/6619082.html

https://juejin.im/post/5aa00229f265da239b40fc02

https://blog.csdn.net/heartandthink/article/details/74558073

总结:vue的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据。必须使用特定的方法才能实现组件之间的数据传递。  
      1:父组件向子组件传递数据:  
              在vue中,可以使用props向子组件传递数据  
        1): 子组件在props中创建一个属性,用于接收父组件传过来的值  
        2): 父组件中注册子组件  
        3): 在子组件标签中添加子组件props中创建的属性  
        4): 把需要传给子组件的值赋给该属性  
          
      2:子组件向父组件传递数据:  
              子组件主要通过事件传递数据给父组件  
        1):子组件中需要以某种方式例如点击事件的方法来触发一个自定义事件  
        2):将需要传的值作为$emit的第二个参数,该值将作为实参传给相应自定义事件的方法  
        3):在父组件中注册子组件并在子组件标签上绑定对自定义事件的监听  
          
      3:子组件向子组件传递数据  
        vue没有直接子组件对子组件传参的方法,建议将需要传递数据的子组件,都合并为一个组件.  
         如果一定需要子组件对子组件传参,可以先传到父组件,再传到子组件,为了便于开发,vue推出了一个状态管理工具vuex,  
         可以很方便的实现组件之间的参数传递。

vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)的更多相关文章

  1. webpack入坑之旅(五)加载vue单文件组件

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  2. Vue单文件组件

    前面的话 本文将详细介绍Vue单文件组件 概述 在很多 Vue 项目中,使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页 ...

  3. vue 单文件组件

    在很多vue项目中,我们使用vue.component来定义全局组件,紧接着用new Vue({el:'#container'})在每个页面内指定一个容器元素 这种方式在很多中小规模的项目中运作的很好 ...

  4. webpack打包vue单文件组件

    一.vue单文件组件 ①文件扩展名为 .vue 的 就是single-file components(单文件组件) ②参考文档:单文件组件 二.webpack加载第三方包 ①项目中,如果需要用到一些第 ...

  5. ts-loader如何与vue单文件组件衔接

    .ts-loader是如何与vue单文件组件衔接作用的 https://github.com/microsoft/TypeScript-Vue-Starter https://www.npmjs.co ...

  6. 基于VSCode的vue单文件组件模板设置---一次设置,可爽终生

    第一步: 第二步: 第三步: 打开vue.json文件后,如果是初次设置,应该如下图所示,绿色注释部分不用管,注意那两个白色大括号 第四步:在大括号内全部粘贴如下代码,保存即可完成vue模板的设置 & ...

  7. vue 单文件组件最佳实践

    vue 单文件组件最佳实践 生命周期 template <template> <section> <h1>vue single file components te ...

  8. vue单文件组件data选项的函数体获取vue实例对象

    因配置的关系,导致 vue的data选项中存在事件.而事件无法获取 vue 的实例对象:项目是单文件形式的,以下代码只是例子 new Vue({ el:..., data:{ a: { onevent ...

  9. 如何手动解析vue单文件并预览?

    开头 笔者之前的文章里介绍过一个代码在线编辑预览工具的实现(传送门:快速搭建一个代码在线编辑预览工具),实现了css.html.js的编辑,但是对于demo场景来说,vue单文件也是一个比较好的代码组 ...

  10. VUE2 第六天学习--- vue单文件项目构建

    阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...

随机推荐

  1. 微信小程序下滑时能实现加载更多数据

    wxml代码: <view class="scroll"> <!-- 绑订页面上拉触底事件的处理函数onReachBottom事件 --> <scro ...

  2. java下载镜像

    镜像地址 https://repo.huaweicloud.com/java/jdk/ 如果你不知道选择哪个版本就点击下面这个链接吧 https://repo.huaweicloud.com/java ...

  3. Mybatis的ResultMap对column和property

    首先,先看看这张图,看能不能一下看明白:   select元素有很多属性(这里说用的比较多的): id:命名空间唯一标识,可以被用来引用这条语句 parameterType:将会传入这条语句的参数类的 ...

  4. 如何用 Redis 解决海量重复提交问题

    前言 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同.按照这个含义,最终的含义就是 对数据库的影响只能是一次性的, ...

  5. web服务器-nginx优化

    web服务器-nginx优化 一 并发优化 nginx工作模式: 主进程 + 工作进程 启动工作进程数量 worker_processes 4; #指定运行的核的编号,采用掩码的方式设置编号 work ...

  6. 如何绑定msix中断 cpu亲和性

    echo X > /proc/irq/中断号/smp_affinity /proc/irq目录下面会为每个注册的irq创建一个以irq编号为名字的子目录,每个子目录下分别有以下条目:1.smp_ ...

  7. Kernel Pwn基础教程之 Double Fetch

    一.前言 Double Fetch是一种条件竞争类型的漏洞,其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差,我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy ...

  8. WindowsServer域用户批量创建方法

    @font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...

  9. mycat分库分表 看这一篇就够了

    ​ 之前我们已经讲解过了数据的切分,主要有两种方式,分别是垂直切分和水平切分,所谓的垂直切分就是将不同的表分布在不同的数据库实例中,而水平切分指的是将一张表的数据按照不同的切分规则切分在不同实例的相同 ...

  10. ES5和ES6继承方式区别?

    ES5定义类以函数形式, 以prototype来实现继承 ES6以class形式定义类, 以extend形式继承