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

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. xshell + xftp 安装及1603错误解决

    xshell + xftpan下载安装 百度网盘下载链接:https://pan.baidu.com/s/14orvEWDjFkrLvr_9JaG4Gw 提取码:om9z 下载地址 https://w ...

  2. idea Alt+Insert:构造函数

    Alt+Insert:构造函数 包含参数: Constructor:全参构造 Getter:必须的 return 字段名 Setter:this 值 Getter and Setter:选择字段以生成 ...

  3. Django基础六之cookie和session

    Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...

  4. Flink消费kafka

    Flink消费Kafka https://blog.csdn.net/boling_cavalry/article/details/85549434 https://www.cnblogs.com/s ...

  5. centos 在线安装 docker

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 在新主机上首次安装Docker Engine之前,需要设置Docker存储库.之后,您可以从存储库安装和更新Docker. 设置存储库 安装yu ...

  6. C# WinForm 解决子窗体放大后,子窗体图标放大的问题

    解决子窗体放大后,子窗体的图标占用主窗体的菜单栏的问题. C#子窗体最大化时, 那个图标跑到主窗体的前面去了, 造成界面不统一也不美观. 所以需要进行处理, 只要有主窗体的菜单ItemAdded事件中 ...

  7. json知识点总结(二)--JSONObject详解

    JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素.JSONObject可以很方便的转换成字符串,也可以很方便 ...

  8. MM32F0140 UART1 DMA RX and TX 中断接收和发送数据

    目录: 1.MM32F0140简介 2.DMA工作原理简介 3.初始化MM32F0140 UART1 4.配置MM32F0140 UART1 DMA接收 5.配置MM32F0140 UART1 DMA ...

  9. Python安装wxPython和ubuntu使用apt提示不能更新

    [空两格]昨天憨批室友搁我面前装b,说他会用pip安装Python包了,说是安装wxPython的时候通过换源解决了之前安装出错的问题.我一听,这事不对劲啊,是这个b直接看不懂输出了吧.果然,我让他在 ...

  10. Vue指令02——v-on指令和v-show的使用

    Vue指令02--v-on指令和v-show的使用 v-on指令 格式1:v-on:事件="方法" 格式2:@事件="方法" 格式3:@事件="方法( ...