第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件

原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929

父组件 => props[parent-data] => 子组件 => watch[parent-data] => children-data = parent-data // 子组件监听父组件的改变

子组件 => $emit[children-data] => 父组件 => parant-data = children-data // 子组件通知父组件自身的改变

// 父组件
<template>
<div>
<Children :parentData="parentData" @getChildrenStatus="getChildrenStatus"></Children>
</div>
</template>
<script>
export default {
data(){
return {
parentData: 1
}
},
methods: {
getChildrenStatus: function(data){ // 实时更新子组件的变化
this.parentData = data
}
}
}
</script>
//子组件
<script>
export default {
data(){
return {
chiildrenData: 1
}
},
props: ['parentData'],
watch: {
parentData: function(){ // 监听父组件的变化
this.childrenData = this.parentData
}
},
mounted(){
this.$emit('getChildrenStatus', this.childrenData) // 将改变通知父组件(保证父子组件数据一致)
}
}
</script>

第二种 .sync 修饰符

在vue的组件通信props中,一般情况下,数据都是单向的,子组件不会更改父组件的值

那么vue提供.sync作为双向传递的关键字,实现了父组件的变动会传递给子组件,而子组件的foo改变时,通过事件机制,修改父组件的foo。完成了子组件newFoo和父组件foo的双向映射。

// 父组件
<Son :foo.sync="foo"></Son>
//子组件
props: ['foo'],
data: function () {
return {
newFoo: this.foo;
}
},
methods:{
add:function(){
this.newMsg=10;
this.$emit('update:foo',this.newFoo);
}
}

在一些情况下,可能会对一个props进行'双向绑定',事实上 , '.sync'修饰符提供了此功能

  • 当一个子组件改变了一个props 的值时,这个变化也会同步到父组件中所绑定的值
  • 也会导致问题,因为破坏了‘单项数据流’的假设,由于子组件改变props的代码和普通代码改懂毫无区别,当光看子组件代码时,完全不知何时改变了父组件的状态
  • 会被重新引入,扩展为一个自动更新父组件属性的v-on侦听器
  • v-model毕竟不是给组件与组件之间通信而设计的双向绑定,无论从语意上和代码写法上都没有,'.sync'直观和方便
  • 无论从v-model还是'.sync'修饰符来看,都离不开$emit 和 v-on 语法糖的封装,主要目的还是为了保证数据的正确单向流动与显示流动
<Son :foo.sync="sth"></Son>   //.sync修饰符
<Son :foo="sth" @update:foo="value=>sth=value"></Son>
  • :foo则是Son 子组件需要从父组件props接受的数据
  • 通过事件显示监听update:foo(foo则是props显示监听的数据),通过箭头函数执行回调,把函数传给sth,则就形成一种双向绑定循环链条
  • 当子组件需要更新foo的值时,需显示地触发更新事件
this.$emit('update:foo',newValue)

同时父组件@update:foo 也是依赖子组件的显示触发,这样可以轻松的捕捉到了数据的正常流动

  • 第一个参数则是 update 则是显示更新的事件,跟在后面的 :foo 则是需要改变对应的props值
  • 第二个参数传入的是希望父组件foo数据里将要变化的值,以及用于父组件接受update时更新数据

warn: 子组件改变父组件的数据时,update冒号后面的参数和父组件传递进来的值是同步的,想改变哪个,则冒号后面的值对应的就是哪个,两者相互对应,必填

Vue父子组件数据双向绑定,子组件可修改props的更多相关文章

  1. vue 利用v-model实现父子组件数据双向绑定

    v-model父组件写法: v-model子组件写法: 子组件export default中的model:{}里面两个值,prop代表着我要和props的那个变量相对应,event表示着事件,我触发事 ...

  2. 使用 v-model 实现 双向绑定.(子组件和父组件.)

    vue 自定义组件 v-model双向绑定. 父子组件同步通信   父子组件通信,都是单项的,很多时候需要双向通信.方法如下: 1.父组件使用:msg.sync="aa"  子组件 ...

  3. vue父组件数据改变,子组件数据并未发生改变(那是因为你没写监听)附带子组件的写法

    下面的代码有 父组件有三个按钮,年.月.日 点击之后父组件的数据发生改变,子组件却没改变,打印接受的数据,除了第一次其他都没打印,那是因为你没有写监听 <template> <div ...

  4. vue中v-model 数据双向绑定

    表单输入绑定 v-model 数据双向绑定,只能应用在input /textare /select <div id="app"> <input type=&quo ...

  5. vue 父子组件数据双向绑定

    父组件 <find-search v-model="searchshow"></find-search> 子组件 props: { value: { typ ...

  6. vue - 父组件数据变化控制子组件类名切换

    先说当时的思路和实现核心是父子组件传值和v-bind指令动态绑定class实现 1. 父组件引用.注册.调用子组件script中引用 import child from '../components/ ...

  7. Vue2.x中的父组件数据传递至子组件

    父组件结构 template <template> <div> <v-girl-group :girls="aGirls"></v-gir ...

  8. vue中的数据双向绑定

    学习的过程是漫长的,只有坚持不懈才能到达到自己的目标. 1.vue中数据的双向绑定采用的时候,数据劫持的模式.其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的get ...

  9. [vue]实现父子组件数据双向绑定

    参考: http://www.cnblogs.com/xxcanghai/p/6124699.html <!DOCTYPE html> <html lang="en&quo ...

随机推荐

  1. 【Nodejs】326- 从零开发一个node命令行工具

    本文由 IMWeb 社区授权转载自腾讯内部 KM 论坛.点击阅读原文查看 IMWeb 社区更多精彩文章. 什么是命令行工具? 命令行工具(Cmmand Line Interface)简称cli,顾名思 ...

  2. 【Java Web开发学习】Spring加载外部properties配置文件

    [Java Web开发学习]Spring加载外部properties配置文件 转载:https://www.cnblogs.com/yangchongxing/p/9136505.html 1.声明属 ...

  3. 安装mysql5.7(亲手实操)

    https://files-cdn.cnblogs.com/files/yucoder/%E5%AE%89%E8%A3%85mysql5.7.pdf

  4. d3.js 教程 模仿echarts折线图

    今天我们来仿echarts折线图,这个图在echarts是折线图堆叠,但是我用d3改造成了普通的折线图,只为了大家学习(其实在简单的写一个布局就可以).废话不多说商行代码. 1 制作 Line 类 c ...

  5. 一起学Vue之样式绑定

    在前端开发中,设置元素的 class 列表和内联样式是基本要求.本文主要讲解Vue开发中,样式列表和内联样式的绑定,仅供学习分享使用,如果有不足之处,还请指正. 概述 Vue操作元素的 class 列 ...

  6. 让 Lua 访问数据库

    Lua 自身并没有提供访问数据库的函数,但是借助外部扩展库我们可以很容易实现对数据库的各种操作,下面就为大家介绍这样一个扩展库 - LuaSQL,你可以在下载区得到它. LuaSQL 定义了一套简单的 ...

  7. gitlab如何从Github导入项目

    本文简单演示如何Github上导入项目到私人搭建的Gitlab中,搭建过程参考:CentOS7 搭建gitlab服务器. Gitlab版本是gitlab-ce-12.0.2,界面可能稍有差异,但应该影 ...

  8. 一起学SpringMVC之异常处理

    在系统开发过程中,异常处理是不可避免,如果异常处理不好,会给用户造成很差的体验,本文主要讲解在SpringMVC开发过程中,异常处理的相关知识点,仅供学习分享使用,如有不足之处,还请指正. 概述 在S ...

  9. MTDDL 美团分布式数据访问中间件(转)

    MTDDL 美团分布式数据访问中间件(转) 原文地址:MTDDL--美团点评分布式数据访问层中间件 因原文文字和图显示有问题,故整理于此,仅供参考. 业界方案 组件 简介 Atlas Qihoo 36 ...

  10. 老师傅珍藏多年CAD常用快捷键合集,收藏,工作效率翻倍!

    想要熟练操作CAD,做一名出色的CAD绘图员,少不了勤学苦练,还要掌握一些常用的绘图命令以及常用快捷键. 今天就来跟大家分享超全的CAD绘图命令,以及常用快捷键,学会涨工资! 常用快捷键: CTRL快 ...