uniapp 微信小程序:v-model双向绑定问题(自定义 props 名无效)

uniapp 微信小程序:v-model双向绑定问题(自定义 props 名无效)

前言

VUE中父子组件传递数据的基本套路:

  1. 父传子 props
  2. 子传父 this.$emit('事件名', '数据');
  3. 使用 sync 修饰符,实现支持同步数据

问题

因为用的是 uniapp 开发小程序,所以要考虑到兼容性问题,不要把自己当正经VUE2。

小程序虽然支持 v-model 指令,但不支持 model 选项。

所以要么子组件中声明默认的 value 这个 props 来接收值。

要么手动:绑定属性事件

双向绑定示例

使用 v-model

由于小程序不支持 model 选项。

这个方案中:子组件里只能使用 value 接收数据,更新时触发 input

  • 父组件
html 复制代码
<template>
	<view>
		<view><text>父组件:{{ msg }}</text></view>
		<vmodel-component v-model="msg"></vmodel-component>
	</view>
</template>

<script>
	export default {
		data() {
			return { msg: '大家好,我是:使用 v-model' }
		},
		methods: {}
	}
</script>

<style>
</style>
  • 子组件
html 复制代码
<template>
	<view> 
		<view> 子组件:{{value}}  </view>
		<button @click="onclick" >更新</button>
	</view>
</template>

<script>
	export default {
		data() {return {};},
		props:{
			value:{ type: String, default: "未收到父值" }
		},
		methods:{
			onclick(e){
				this.$emit('input', '我是笨笨'); // v-mode 
			}
		}
	}
</script>

<style>
</style>

使用 v-bind + v-on

当然一般都会用简写形式:
v-bind:缩写为 :
v-on:缩写为 @

由于是自己手绑定,props事件名都可以自己定。

比如在子组件中我就用 msg 接收数据。

事件我自己取名叫 customEvent

html 复制代码
<template>
	<view>
		<view><text>父组件:{{ msg }}</text></view>
		<novmodel-component :msg="msg" @customEvent="e => msg = e"></novmodel-component>
		<!-- <novmodel-component :msg="msg" @input=" msg = $event "></novmodel-component> -->
	</view>
</template>

<script>
	export default {
		data() {
			return { msg: '大家好,我是:不使用 v-model' }
		},
		methods: {}
	}
</script>

<style>
</style>
  • 子组件
html 复制代码
<template>
	<view> 
		<view> 子组件:{{msg}}  </view>
		<button @click="this.$emit('customEvent', '我是笨笨')" >更新</button>
	</view>
</template>

<script>
	export default {
		data() {return {};},
		props:{
			msg:{ type: String, default: "未收到父值" }
		},
		methods:{}
	}
</script>

<style>
</style>

使用 sync 修饰符

使用 sync 时可以自己决定绑到子组件的哪个 props 上,比如就绑到了 msg 上。

同步数据时触发 update:要更新的props

  • 父组件
html 复制代码
<template>
	<view>
		<view><text>父组件:{{ msg }}</text></view>
		<sync-component :msg.sync="msg"></sync-component>
	</view>
</template>

<script>
	export default {
		data() {
			return { msg: '大家好,我是:使用 sync 修饰符,实现同步数据' }
		},
		methods: {}
	}
</script>

<style>
</style>
  • 子组件
html 复制代码
<template>
	<view> 
		<view> 子组件:{{msg}}  </view>
		<button @click="$emit('update:msg', '我是笨笨')" >更新</button>
	</view>
</template>

<script>
	export default {
		data() {return {};},
		props: {
			msg: { type: String, default: "未收到父值" }
		},
		methods:{}
	}
</script>

<style>
</style>

参考资料

uniapp官方文档 :模板指令 v-model
uniapp官方文档 :.sync 修饰符

vue2官方文档:选项 model

相关推荐
说私域2 小时前
社群时代下的商业变革:“开源AI智能名片链动2+1模式S2B2C商城小程序”的应用与影响
人工智能·小程序·开源
前端与小赵3 小时前
uni-app开发安卓app时控制屏幕常亮不息屏
android·gitee·uni-app
毕设源码-朱学姐4 小时前
【开题答辩全过程】以 基于Java的医务室病历管理小程序为例,包含答辩的问题和答案
java·开发语言·小程序
文人sec4 小时前
微信小程序minium自动化测试SOP
微信小程序·小程序
克里斯蒂亚诺更新5 小时前
微信小程序 点击地图后弹出一个模态框
微信小程序·小程序·notepad++
云起SAAS5 小时前
患者随访管理抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·患者随访管理
2501_916008895 小时前
HTTPS 请求抓包,从原理到落地排查的工程化指南(Charles / tcpdump / Wireshark / Sniffmaster)
ios·小程序·https·uni-app·wireshark·iphone·tcpdump
xiaohe06015 小时前
🥳 Uni ECharts 2.1 发布:正式支持鸿蒙,零成本迁移、全平台兼容、跨端开发零负担!
vue.js·uni-app·echarts
2501_9159090617 小时前
WebView 调试工具全解析,解决“看不见的移动端问题”
android·ios·小程序·https·uni-app·iphone·webview
说私域19 小时前
“开源链动2+1模式AI智能名片S2B2C商城小程序”在拉群营销中的应用与效果
人工智能·小程序