uniapp使用分包异步化后uview2出现object,object的解决办法

我们都知道uniapp现在已经支持了在subPackages里使用分包异步化,但是分包异步化之后总会出现一些问题,比如我这里这样写,测试用uview2组件的u-input在输入的时候,无论输入什么,框里总会出现object,object,而原生组件却会输入什么显示什么,网上问了一圈人也没有人解答。

在这里插入图片描述
难道要分包里的所有u-view的u-input的组件全部都换成原生input?
难道就这样放弃了uview阵营?
不不不。

一、问题跟踪

从图片中可以看到我们的u-input绑定了v-model事件,而v-model我们都知道他是一个双向绑定事件,即是从data到view,从view到data的互相绑定事件,会不会由于微信小程序dom没有加载完成之后,还没有加载我们uview分包,之后互相绑定,所以是失效的。
那么,咱们试一试,取消u-input的v-model属性,发现是正常的可输入的,输入什么显示什么,那么确定是哪个点的问题,我们就想解决办法。

二、解决办法

既然v-model不能使用,那我们就拆分v-model,其实v-model事件就是v-bind:value和@input事件的组合拳,跟方便面里的蔬菜包和酱包一样,他们组成了一包面。我们只要去掉v-model属性,换成:value和@input这两个属性就行了。

<view class="listTop" style="border: 0;padding: 0 40rpx;">
				临床诊断
			</view>
			<view class="pt-40">
				<u-input 
					placeholder-style="font-size:30rpx" :value="diagnose" @input="updateMessage($event, 'diagnose')" placeholder="请输入临床诊断" type="textarea"
					height="100" :border="false"></u-input>
			</view>
			<view class="listTop " style="padding: 20rpx 40rpx 0;">
				诊断依据
			</view>
			<view class="pt-40">
				<u-input 
					:value="diagnosis_basic" @input="updateMessage($event, 'diagnosis_basic')" placeholder-style="30rpx" placeholder="请输入诊断依据" type="textarea"
					height="140" :border="false"></u-input>
			</view>

大家也看到了,我们@input这里写了一个函数,这个也就是我们用它来从view到data的数据绑定,把它加到vue的methods里就行。

updateMessage(event, targetProperty) {
	this[targetProperty] = event.target.__args__[0];
}

这样做就会把v-model用:value和@input重新实现了一遍,如果你的target底下不是这个值,那么请换成你要的值。

三、更复杂的问题

event.target底下的值,我看了很多其实也不固定,如果你的项目里分包里原来代码也用到了@input方法,那可能改起来有些费事,需要找到要具体更改的值,然后更改才会生效。
比如我这个项目里下面这段代码,之前的人已经在view里监听了@input事件,而且还有别的method在调用这个@input绑定的method。所以,我们就没办法使用了,只能在他的代码里加我们需要的东西,而往往代码没有注释的话,是随着开发者主观意愿而变动的,我们根本猜不到这里具体在做什么,能猜个大概就知足了,所以我们只能多打log,多分析多看,祝大家中秋快乐。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值