mint-ui Picker 显示异常
现象
最近一个老项目页面显示异常,使用mint-ui Picker显示异常,直接显示成了 数据对象,而不是具体travelName 字段
组件
mint-ui Picker
使用方式(vue方式)
// template
<mt-picker :slots="slots" value-key="name" :itemHeight="40" :visibleItemCount='3'
></mt-picker>// js
data(){return {slots: [{"flex": 1,"values": [{"travelNo": "","travelName": "","travelId": "1",}],"className": "slot1","textAlign": "center","defaultIndex": 0,"valueIndex": 0}]}
}
导致错误原因
Picker 组件 value-key 为 travelName,
slots 字段中 travelName 字段为空,导致渲染,直接渲染了这一条数据
{"travelNo": "","travelName": "","travelId": "1",
}
我们来看看 picker-slot 源码是怎么渲染的
具体渲染如下
- 先判断当前 itemValue 是否为对象
- 是对象 ,使用 itemValue[valueKey],且字段有值 并且不为数字0,则渲染 itemValue[valueKey],否则为 渲染 itemValue(valueKey即为传入的travelName)
- 不是对象 直接使用 itemValue
{{ typeof itemValue === 'object' && itemValue[valueKey] ? itemValue[valueKey] : itemValue }}
【注】:picker-slot 源码
<template><div class="picker-slot" :class="classNames" :style="flexStyle"><div v-if="!divider" ref="wrapper" class="picker-slot-wrapper" :class="{ dragging: dragging }" :style="{ height: contentHeight + 'px' }"><div class="picker-item" v-for="itemValue in mutatingValues" :class="{ 'picker-selected': itemValue === currentValue }" :style="{ height: itemHeight + 'px', lineHeight: itemHeight + 'px' }">{{ typeof itemValue === 'object' && itemValue[valueKey] ? itemValue[valueKey] : itemValue }}</div></div><div v-if="divider">{{ content }}</div></div>
</template>