全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案

在项目中开始使用vue2来构建项目了,跟 vue1 很大的一处不同在于2 取消了props 的双向绑定,改成只能从父级传到子级的单向数据流,初衷当然是好的,为了避免双向绑定在项目中容易造成的数据混乱。

解决方案一

然后开始参考网上和github上的方案等等,发现很多解决方案是这样的

  1. 用data对象中创建一个props属性的副本
  2. watch props属性 赋予data副本 来同步组件外对props的修改
  3. watch data副本,emit一个函数 通知到组件外

这里以最常见的 modal为例子:modal挺合适双向绑定的,外部可以控制组件的 显示或者隐藏,组件内部的关闭可以控制 visible属性隐藏,同时visible 属性同步传输到外部

///modal.vue 组件
<template>
 <div class="modal" v-show="visible">
  <div class="close" @click="cancel">X</div>
 </div>
</template>

<script>
export default {
 name:'modal',
 props: {
  value: {
  type: Boolean,
  default:false
  }
 },

 data () {
 return {
  visible:false
 }
 },
 watch:{
  value(val) {
  console.log(val);
  this.visible = val;
  },
  visible(val) {
  this.$emit("visible-change",val);
  }
 },
 methods:{
 cancel(){
  this.visible = false;
 }
 },
 mounted() {
 if (this.value) {
  this.visible = true;
 }
 }
}
</script>


///调用modal组件
<modal :value="isShow" @visible-change="modalVisibleChange"></modal>

export default {
 name: 'app',
 data () {
 return {
  isShow:true,
 }
 },
 methods:{
  modalVisibleChange(val){
  this.isShow = val;
  }
 }
}

这样就解决了 组件props 双向绑定的问题。 但是这样有一个不是太美观的现象就是 在父级调用 modal组件的时候,还需要写一个 modalVisibleChange 的methods. 总是显得这部分代码是多余的。 特别是写一个让别人用的公共组件,这样调用太麻烦了。能不能不写method来实现props的双向绑定呢,答案是可以的。

优美解决方案

那就是利用 v-model, 在组件内部放置一个 隐藏的input 控件来保存v-model的值,进行双向绑定

改成如下代码:

<template>
 <div class="modal" v-show="visible">
  <div class="close" @click="cancel">X</div>
  <input type="text" :value="value" style='display:none;'>
 </div>
</template>

<script>
export default {
 props: {
  value: {
  type: Boolean,
  default:false
  }
 },

 data () {
 return {
  visible:false
 }
 },
 watch:{
  value(val) {
  console.log(val);
  this.visible = val;
  },
  visible(val) {
  this.$emit('input', val);
  }
 },
 methods:{
 cancel(){
  this.visible = false;
 }
 },
 mounted() {
 if (this.value) {
  this.visible = true;
 }
 }
}
</script>


///调用modal组件

 <modal v-model="isShow"></modal>

export default {
 name: 'app',
 data () {
 return {
  isShow:false
 }
 }
}
</script>

这样调用组件的代码是不是很简洁,其他人员要调用的话,会很轻松,只要设置 isShow 就可以控制 modal 组件的显示或者隐藏,同时 如果是modal 组件内部关闭按钮关闭的,状态也会传到 isShow。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue  # props  # 双向绑定  # vue2.0  # 组件双向绑定  # vue2  # 在Vue2中v-model和.sync区别解析  # vue2和vue3组件v-model区别详析  # Vue2子组件绑定 v-model  # 实现父子组件通信方式  # vue2中如何自定义组件的v-model  # Vue ​v-model相关知识总结  # vue2 v-model/v-text 中使用过滤器的方法示例  # vue 2.0组件与v-model详解  # vue2 如何实现div contenteditable=“true”(类似于v-model)的效果  # vue2与vue3双向数据绑定的区别说明  # vue 2 实现自定义组件一到多个v-model双向数据绑定的方法(最新推荐)  # 绑定  # 也会  # 是这样  # 不是很  # 这部  # 一处  # 会很  # 来实现  # 还需  # 为了避免  # 最常见  # 创建一个  # 大家多多  # 要写  # 就可以  # 不写  # 有一个  # 那就是  # 解决了  # 一个函数 


相关文章: 免费网站制作appp,免费制作app哪个平台好?  音响网站制作视频教程,隆霸音响官方网站?  网站制作公司排行榜,抖音怎样做个人官方网站  如何通过IIS搭建网站并配置访问权限?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  制作宣传网站的软件,小红书可以宣传网站吗?  高端网站建设与定制开发一站式解决方案 中企动力  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  制作公司内部网站有哪些,内网如何建网站?  建站之星代理平台如何选择最佳方案?  制作网站的模板软件,网站怎么建设?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何彻底删除建站之星生成的Banner?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  javascript中对象的定义、使用以及对象和原型链操作小结  如何在Golang中指定模块版本_使用go.mod控制版本号  制作营销网站公司,淘特是干什么用的?  黑客入侵网站服务器的常见手法有哪些?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  网站插件制作软件免费下载,网页视频怎么下到本地插件?  香港服务器如何优化才能显著提升网站加载速度?  如何快速生成凡客建站的专业级图册?  如何通过建站之星自助学习解决操作问题?  网站制作免费,什么网站能看正片电影?  已有域名如何快速搭建专属网站?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何通过PHP快速构建高效问答网站功能?  如何有效防御Web建站篡改攻击?  网站app免费制作软件,能免费看各大网站视频的手机app?  外贸公司网站制作哪家好,maersk船公司官网?  如何制作网站标识牌,动态网站如何制作(教程)?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  微信推文制作网站有哪些,怎么做微信推文,急?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站主机服务器选购指南:轻量应用与VPS配置解析  如何在万网开始建站?分步指南解析  ,网页ppt怎么弄成自己的ppt?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速搭建二级域名独立网站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  建站之星后台管理:高效配置与模板优化提升用户体验  如何通过云梦建站系统实现SEO快速优化?  网站微信制作软件,如何制作微信链接?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。