vue.js - vuejs事件修饰符搜索列表流程
问题描述
我是一个vue js新手,我用搜索输入中输入的值执行get操作,如果有结果,我在“listShow”中显示,如果没有结果,我返回“listShow”false。到目前为止没有问题。只有当用户选择任何传入数据时,我才会将传入数据的“名称”搜索文本发送到输入。但是如果没有结果“listShow false”并单击输入之外的某个地方,我想让“newDiv”为真。所以“inputOutClick”完成了这项工作,但是当我点击任何“搜索”数据时,“inputOutClick”不允许这个“selecteds()”函数触发。
而且,我的编码风格是否正确,我太重复了。
- 可以使用搜索@keyup 吗?
- 使用 v-on:focusout 有意义吗?
const app = new Vue({
el: '#app',
data: {
searchText: '',
listShow: true,
newDiv:false,
searcList:[],
},
methods: {
inputOutClick() {
this.listShow = false
},
selecteds(list) {
this.listShow = false;
this.searchText = list.name;
},
async search() {
if (this.searchText !== '') {
const res = await this.callApi('get', 'search' + '?filter=' + this.searchText)
if (res.status === 200) {
this.searcList = this.getList;
if (res.data.length > 0) {
this.listShow = true;
} else {
this.listShow = false;
}
}
} else {
this.listShow = false;
}
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script>
<div id="app">
<div>
<input
type="text"
v-model="searchText"
@keyup="search"
v-on:focusout="inputOutClick"
/>
<div v-if="listShow" style="background:red">
<ul>
<li v-for="(list, index) in searcList">
<a @click="selecteds(list)">{{ list.name }}</a>
</li>
</ul>
</div>
<div v-if="newDiv">
<p>hello</p>
</div>
</div>
</div>
解决方案
您可以@mousedown.prevent
在searchList
条目(click
附加处理程序的位置)上使用。如果单击条目,这可以防止v-on:focusout
触发事件。searchList
<input
type="text"
v-model="searchText"
@keyup="search"
v-on:focusout="inputOutClick"
/>
<a
@click="selectEntry(entry)"
@mousedown.prevent
>
xxx
</a>
推荐阅读
- bash - 在某个文本文件中执行 bash
- ant - 如何有条件
进入日志文件? - c++ - .gitignore 不会忽略 CMakeLists 文件夹
- python - 使用python为特定范围的数字过滤一对数组
- electron - DesktopCapture 当我切换窗口 ID 应用程序崩溃时
- google-chrome-extension - 如何从 Firefox/Chrome 插件/扩展中获取 UUID
- django - Django 的 DateFieldListFilter 中 __lt 字段查找背后的基本原理
- r - 使用其索引位置将 txt 列更改为 R 中的日期列
- python - (PYTHON) Randint 喷出错误
- java - 找出赚钱所需的最少硬币数量