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

解决方案一
然后开始参考网上和github上的方案等等,发现很多解决方案是这样的
这里以最常见的 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小时内与您取得联系。