Vue使用.sync 实现父子组件的双向绑定数据问题


Posted in Javascript onApril 04, 2019

1.前言

最近在vue 项目中有一个需求, 就是我需要根据不同的类型在页面中放不同的组件, 组件需要跟当前页面的数据进行双向绑定,如果都写在同一个页面 代码会显得比较多,毕竟我当前页面已经7-800行代码了 所以我需要把一些元素定义成组件 ,封装起来,所以就会遇到 数据的传值绑定问题

2.父组件

首先我们来看看官方文档 [ https://cn.vuejs.org/v2/guide/components.html#sync-修饰符 ]

.sync 修饰符所提供的功能。当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定

就是说我们可以直接在我们需要传的prop后面加上 .sync

比如 我下面需要绑定   p_model,然后我在他后面加上.sync

<certificate-input
    :p_model.sync='pname'>
 </certificate-input>

他会扩展成:

<certificate-input :p_model="pname" @update:p_model="val => pname= val"></certificate-input>

父组件全部代码:

<template>
 <div>
 <certificate-input
    :p_model.sync='pname'
    :xi_model.sync="xiname">
 </certificate-input>
</div>
</template>
import CertificateInput from '../common/CertificateInput.vue'
export default {
 name: 'fathor',
 components: {
  CertificateInput 
 },
 data() {
  return {
   pname:"",
   xiname:""
 }  
}

子组件

上面说了一大推父组件下面我们来看看子组件怎么写 ?

因为我项目中使用vux 代码就直接复制过来改了一下

<template>
 <div>
  <x-input
   title="姓名" 
   v-model="name" 
   ></x-input>
  <x-input title="身份证号" 
    v-model="idCard" 
    placeholder="请输入身份证号"
    required>
  </x-input>
 </div>
</template>
<script type="text/javascript">
 import { XInput} from 'vux'
 export default{
  name:'certificateInput',
  props:["p_model","xi_model"],
  components:{
   XInput
  },
  data(){
   return{
    name:this.p_model,
    idCard:this.xi_model
   }
  },
  watch:{
  
   p_model(val) { 
    this.address = val;
   },
   name(val){
  //设置监听,如果改变就更新 p_model
    this.$emit('update:p_model', val)
   },
   xi_model(val){
    this.certificate = val
   },
   idCard(val){
     this.$emit('update:xi_model', val)
   }
  }
 }
</script>

由上面可以看出   子组件主要代码 就是监听他的改变 然后触发父组件监听的事件

name(val){
  //设置监听,如果改变就更新 p_model
    this.$emit('update:p_model', val)
}

好了 上面就是我的方法

感觉写的好low

以后多多改善

总结

以上所述是小编给大家介绍的Vue使用.sync 实现父子组件的双向绑定数据问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
Jquery下判断Id是否存在的代码
Jan 06 Javascript
js将long日期格式转换为标准日期格式实现思路
Apr 07 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 Javascript
如何屏蔽防止别的网站嵌入框架代码
Aug 24 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
简单谈谈原生js的math对象
Jun 27 Javascript
node.js中使用Export和Import的方法
Sep 18 Javascript
webpack4实现不同的导出类型
Apr 09 Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 #Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 #Javascript
详解JavaScript的变量
Apr 04 #Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 #Javascript
js 计算图片内点个数的示例代码
Apr 04 #Javascript
在node中使用jwt签发与验证token的方法
Apr 03 #Javascript
全面了解JavaScript的作用域链
Apr 03 #Javascript
You might like
php的mssql数据库连接类实例
2014/11/28 PHP
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
webpack4简单入门实例
2018/09/06 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
python 生成器协程运算实例
2017/09/04 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
使用python远程操作linux过程解析
2019/12/04 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
工作自我评价分享
2013/12/01 职场文书
大学三年的自我评价
2013/12/25 职场文书
红色故事演讲稿
2014/05/22 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python