极乐门资源网 Design By www.ioogu.com
在项目中开始使用vue2来构建项目了,跟 vue1 很大的一处不同在于2 取消了props 的双向绑定,改成只能从父级传到子级的单向数据流,初衷当然是好的,为了避免双向绑定在项目中容易造成的数据混乱。
解决方案一
然后开始参考网上和github上的方案等等,发现很多解决方案是这样的
- 用data对象中创建一个props属性的副本
- watch props属性 赋予data副本 来同步组件外对props的修改
- 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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
极乐门资源网 Design By www.ioogu.com
极乐门资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com
暂无Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案的评论...
更新日志
2025年01月13日
2025年01月13日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]