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

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. php模式的设计

    工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式. 工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态 ...

  2. Nginx多个域名配置ssl证书出错解决方案

    解决方案一: 验证通配符 SSL 证书 当涉及通配符 SSL 证书时,NET::ERR_CERT_COMMON_NAME_INVALID 错误会变得稍微复杂一些. 这种类型的证书旨在加密多个子域的数据 ...

  3. Golang 基础之基础语法梳理 (二)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第二章节 Golang 基础之基础语法梳理 (一) Gol ...

  4. Three.js 火焰效果实现艾尔登法环动态logo 🔥

    声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 <艾尔登法环>是最近比较火的一款游戏,观察可以发现它的 Log ...

  5. xx局点FusionCloud6.3type1修改配额占用

    问题描述: SC中配额占用跟实际资源使用不一致 SC界面显示参数: 实例已使用:35 内存已使用:440G VCPU已使用:220 云硬盘已使用:11850G/56个 SC实际统计参数: 实例已使用: ...

  6. 重定向(Redirect)和请求转发(Forward)

    一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(reques ...

  7. mybatis缓存-二级缓存

    1.2 二级缓存 [官方声明] => 如何开启[二级缓存] 默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存. 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行 ...

  8. 基于JDK的动态代理原理分析

    基于JDK的动态代理原理分析 这篇文章解决三个问题: What 动态代理是什么 How 动态代理怎么用 Why 动态代理的原理 动态代理是什么? 动态代理是代理模式的一种具体实现,是指在程序运行期间, ...

  9. [源码解析] TensorFlow 分布式环境(5) --- Session

    [源码解析] TensorFlow 分布式环境(5) --- Session 目录 [源码解析] TensorFlow 分布式环境(5) --- Session 1. 概述 1.1 Session 分 ...

  10. JAVA 用命令提示符执行java找不到或者无法加载主类

    使用cmd编译执行java文件时候,报错---找不到或者无法加载主类如下图 把红色部分去掉,再次编译执行如下解决问题 ,执行成功!!!!!! 2.当我们在eclipes中执行运行的时候 ggggggg ...