要实现当你选择 v-for
下拉的标签时,使 placeholder
显示为选中的内容,并且取消显示 v-for
标签,可以按照以下步骤进行修改:
- 在数据中增加一个变量来存储当前选中的电池编号。
- 当用户点击某个项目时,更新这个变量并清空列表。
以下是修改后的代码示例:
<template>
<uni-easyinput
:placeholder="selectedBatteryNo || '请输入搜索内容'"
prefixIcon="search"
v-model="inputValue"
@iconClick="iconClick"
@input="input"
class="search-bar uni-search-bar">
</uni-easyinput>
<!-- 如果没有选择项目,就显示过滤后的列表 -->
<view v-if="!selectedBatteryNo" v-for="(item, index) in filteredList" :key="index" :class="item.show ? 'items' : ''" class="view-for"
@click="viewData(item)">
{{ item.batteryNo }}
<text v-if="item.factory == 1" style="color: green; margin-left: 20px; font-weight: bold;">(60S 原厂)</text>
<text v-if="item.factory == 2" style="color: green; margin-left: 20px; font-weight: bold;">(80V 原厂)</text>
</view>
</template>
<script>
export default {
data() {
return {
inputValue: '',
selectedBatteryNo: '', // 用于存储选中的电池编号
actarr: [],
batteryData: [], // 假设这是你的电池数据
};
},
computed: {
// 根据搜索文本过滤数据列表
filteredList() {
let arr = this.batteryData.filter(item => item.batteryNo.includes(this.inputValue));
console.log('arr=', arr);
return arr;
}
},
methods: {
viewData(item) {
if (this.actarr.includes(item.batteryNo)) {
const index = this.actarr.indexOf(item.batteryNo);
this.actarr.splice(index, 1);
item.show = false; // 隐藏已选择的项
this.selectedBatteryNo = ''; // 清空选中状态
this.inputValue = ''; // 清空输入框内容
} else {
this.actarr.push(item.batteryNo);
item.show = true;
// 更新选中电池编号并清空其他项
this.selectedBatteryNo = item.batteryNo;
// 可选择清空输入框,以避免后续输入影响结果。
this.inputValue = '';
}
console.log(this.actarr, '当前选中的数组');
},
input(res) {
this.inputValue = res;
console.log('inputValue:', this.inputValue);
// 当有输入时,清除选中的电池编号,使其可以重新搜索和选择其他内容。
if (res) {
this.selectedBatteryNo = '';
}
},
iconClick() {
// 图标点击事件处理逻辑(如需要)
}
}
</script>
<style scoped>
/* 添加相关样式 */
</style>
修改说明:
- 新增
selectedBatteryNo
:用于保存当前选中的电池编号。 - 在
viewData
方法中:更新selectedBatteryNo
的值以显示在placeholder
中,并在点击时隐藏下拉项。 - 更新
filteredList
渲染条件:仅当没有选中项目时才显示过滤后的列表。这样,当用户选择一项后,下拉项会消失,仅展示所选内容。
内容由零声教学AI助手提供,问题来源于学员提问