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

相关推荐
EatFan2 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
bug总结1 天前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
大佐不会说日语~1 天前
Android 16 下 uni-app APP 提示“网络连接失败”的排障与修复
android·uni-app
m0_587383001 天前
折扣卡CPS系统源码的技术架构与实战开发指南
人工智能·小程序·数据挖掘·系统架构·需求分析
2501_915106321 天前
苹果App Store上架费用及流程全面解析
android·ios·小程序·https·uni-app·iphone·webview
白远山1 天前
家政服务派单平台搭建实战指南:从需求分析到系统设计全流程解析
java·开发语言·架构·uni-app·需求分析
T01156181 天前
全栈项目实战手记|艺培场馆课时预约小程序全项目开发历程完整复盘总结
运维·服务器·小程序
lhldsg1 天前
多商户团购系统源码:技术架构选型与二次开发实战指南
java·小程序·架构
2601_949950631 天前
一套小程序,解决资料整理、在线刷题和错题复盘
人工智能·小程序·刷题·练习·小程序推荐
宸翰1 天前
解决uni-app 中 SVG 图片在 iOS 端显示模糊问题
前端·uni-app