Error in callback for watcher “value“: “TypeError: Cannot read property ‘repalce‘ of null“

在Vue项目中遇到Error in callback for watcher "value": "TypeError: Cannot read property 'level' of null"的问题。该错误源于后台接口返回null,导致v-model绑定的值为空。解决方法包括在组件中设置默认值属性`:default-value`,并使用方法处理后台返回的null值,将其转换为'',防止报错。

vue空页面value空值问题

在这里插入图片描述
在页面后台中,输出了Error in callback for watcher “value”: "TypeError: Cannot read property ‘level’ of null"这样的错误,看了网上的一些博客,个人认为就是在input输入框中,当第一次输入,未保存数据之前,接口返回的数据基本都是null,所以可能是会报这个错误

解决办法

<u-form-item :label-position="labelPosition" label="出版物种类" prop="publishVariety" :label-width="labelWidth" :required="true">
				<u-select model="single-column" :list="publishVarietyList" v-model="publishVarietyShow" @confirm="publishVarietyConfirm"
				 :default-value="publishVarietyDefaultValue"></u-select>
				<u-input :border="border" :placeholder="rules.publishVariety[0].message" v-model="model.publishVarietyName" type="select"
				 :select-open="publishVarietyShow" @click="publishVarietyShow=true"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="阅读方式" prop="readTypeList" :label-width="labelWidth" :required="true">
				<u-checkbox-group shape="square" :width="CheckWidth" :wrap="false" @change="readTypeChange">
					<u-checkbox v-model="item.checked" v-for="(item, index) in readTypeList" :key="item.code" :name="item.code">{{ item.name }}</u-checkbox>
				</u-checkbox-group>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="主题特色" prop="themeFeatures" :label-width="labelWidth" :required="true">
				<u-popup v-model="themeFeaturesShow" mode="bottom">
					<view class="multi-check">
						<u-checkbox-group shape="square" class="group" @change="themeFeaturesCheckbox" v-model="model.themeFeaturesList">
							<u-checkbox v-for="(item,index) in themeFeaturesList" :key="index" v-model="item.checked" :name="item.code"
							 class="checkbox">{{item.name}}</u-checkbox>
						</u-checkbox-group>
						<u-button @click="themeFeaturesConfirm">确定</u-button>
					</view>
				</u-popup>
				<u-input :border="border" :placeholder="rules.themeFeatures[0].message" v-model="model.themeFeatures" type="select"
				 @click="themeFeaturesShow = true"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="所有制类型" prop="ownershipType" :label-width="labelWidth" :required="true">
				<u-select model="single-column" :list="ownershipTypeList" v-model="ownershipTypeShow" @confirm="ownershipTypeConfirm"
				 :defailt-value="ownershipTypeDefaultValue"></u-select>
				<u-input :border="border" :placeholder="rules.ownershipType[0].message" v-model="model.ownershipTypeName" type="select"
				 :select-open="ownershipTypeShow" @click="ownershipTypeShow = true"></u-input>
			</u-form-item>
			<u-form-item :label-position="labelPosition" label="提供服务" prop="provideServices" :label-width="labelWidth" :required="true">
				<u-popup v-model="provideServicesShow" mode="bottom">
					<view class="multi-check">
						<u-checkbox-group shape="square" class="group" @change="provideServicesCheckbox">
							<u-checkbox v-for="(item,index) in provideServicesList" :key="index" v-model="item.checked" :name="item.code"
							 class="checkbox">{{item.name}}</u-checkbox>
						</u-checkbox-group>
						<u-button @click="provideServicesConfirm">确定</u-button>
					</view>
				</u-popup>
				<u-input :border="border" :placeholder="rules.provideServices[0].message" v-model="model.provideServices" type="select"
				 :select-open="provideServicesShow" @click="provideServicesShow = true"></u-input>
			</u-form-item>

代码中可以看出,在input组件中,v-model绑定的值在一开始是后台接口返回的null值,所以可能会引起我所说的错误。所以要在u-select组件中添加默认值属性,:default-value=“ownershipTypeDefaultValue”
ownershipTypeDefaultValue方法代码如下:

ownershipTypeDefaultValue() {
				if (_.isEmpty(this.model.ownershipType)) {
					return;
				}
				return [_.findIndex(this.ownershipTypeList, {
					'value': this.model.ownershipType
				})];
			}

可能加了这个不为空判断还是不行,那就要看下你后台接口返回的数据是否为null,如果是null是不行的,null和‘’还是有区别的,所以我们要在methods方法中把为null的属性的值改为’ ’ 代码如下:

async loadCurStore() {
				let resp = await this.$ajax.get({
					url: '/bs/mine/getCurStore.json'
				})
				console.log('info', resp.info);
				this.model = _.mapValues(resp.info, value => {
					if (_.isNull(value)) {
						value = '';
					}
					return value;
				})
				console.log('ts',this.model.registerTs);
			},

map函数在js中是用来遍历作用的,这里是参数有resp.info,value
将value为null的赋值为’’,这样的话就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值