我只想显示一个点击的输入(vue.js)
I want to show only one input clicked (on vue.js)
我想在点击时显示输入,但在 for 循环中我想只显示被点击的输入
<div v-for="(todo, n) in todos">
<i class="fas fa-minus ml-2"></i>
<li class="mt-2 todo">
{{ todo }}
</li>
<li class="button-container">
<button class="ml-1 btn btn-primary rounded-circle btn-sm" v-if="isHidden" v-on:click="isHidden = false"><i
class="THIS-CLICK"></i></button>
<input class="ml-5 border border-primary rounded" v-if="!isHidden" v-model="todo">
<button class="ml-1 btn btn-success rounded-circle btn-sm" v-if="!isHidden" v-on:click="isHidden = true"
@click="modifyTodo(n, todo)"><i class="far fa-save"></i></button>
</li>
</div>
我希望在单击 THIS-CLICK 时,只有一个输入(单击按钮的输入)可见,但处于 for 循环中我不知道是否可以完成
我建议稍微更改一下您的应用程序的结构。您可以通过在按钮内使用 v-if 而不是两个不同的按钮来大量清理代码。
此外,尽可能多地从标记中移出 javascript 是一个很好的做法。
我在下面有一个示例,其中完成了此操作。
关于您的问题,您必须将密钥添加到每个待办事项。
new Vue({
el: "#app",
data() {
return {
todos: [{
name: 'wash hands',
isHidden: true
},
{
name: 'Stay home',
isHidden: true
}
],
};
},
methods: {
toggleTodo(n, todo) {
const hidden = todo.isHidden;
if (hidden) {
this.modifyTodo(n, todo);
todo.isHidden = false;
} else {
todo.isHidden = true;
}
},
modifyTodo(n, todo) {
//Some logic...
}
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<div v-for="(todo, n) in todos">
<i class="fas fa-minus ml-2"></i>
<li class="mt-2 todo">
{{ todo.name }}
</li>
<li class="button-container">
<input class="ml-5 border border-primary rounded" v-if="!todo.isHidden" v-model="todo.name">
<button @click="toggleTodo(n, todo)">
<i v-if="todo.isHidden" class="THIS-CLICK">click-this</i>
<i v-else class="far fa-save">save</i>
</button>
</li>
</div>
</div>
如果您不能这样做,您可以向数据添加一个新键,例如:hiddenTodos
这将是您选择隐藏的待办事项的 ids/a 唯一标识符数组。
在模板中,它将是这样的:
<button @click="hiddenTodos.push(todo)">
...
<div v-if="hiddenTodos.includes(todo)"
我想在点击时显示输入,但在 for 循环中我想只显示被点击的输入
<div v-for="(todo, n) in todos">
<i class="fas fa-minus ml-2"></i>
<li class="mt-2 todo">
{{ todo }}
</li>
<li class="button-container">
<button class="ml-1 btn btn-primary rounded-circle btn-sm" v-if="isHidden" v-on:click="isHidden = false"><i
class="THIS-CLICK"></i></button>
<input class="ml-5 border border-primary rounded" v-if="!isHidden" v-model="todo">
<button class="ml-1 btn btn-success rounded-circle btn-sm" v-if="!isHidden" v-on:click="isHidden = true"
@click="modifyTodo(n, todo)"><i class="far fa-save"></i></button>
</li>
</div>
我希望在单击 THIS-CLICK 时,只有一个输入(单击按钮的输入)可见,但处于 for 循环中我不知道是否可以完成
我建议稍微更改一下您的应用程序的结构。您可以通过在按钮内使用 v-if 而不是两个不同的按钮来大量清理代码。
此外,尽可能多地从标记中移出 javascript 是一个很好的做法。
我在下面有一个示例,其中完成了此操作。
关于您的问题,您必须将密钥添加到每个待办事项。
new Vue({
el: "#app",
data() {
return {
todos: [{
name: 'wash hands',
isHidden: true
},
{
name: 'Stay home',
isHidden: true
}
],
};
},
methods: {
toggleTodo(n, todo) {
const hidden = todo.isHidden;
if (hidden) {
this.modifyTodo(n, todo);
todo.isHidden = false;
} else {
todo.isHidden = true;
}
},
modifyTodo(n, todo) {
//Some logic...
}
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<div v-for="(todo, n) in todos">
<i class="fas fa-minus ml-2"></i>
<li class="mt-2 todo">
{{ todo.name }}
</li>
<li class="button-container">
<input class="ml-5 border border-primary rounded" v-if="!todo.isHidden" v-model="todo.name">
<button @click="toggleTodo(n, todo)">
<i v-if="todo.isHidden" class="THIS-CLICK">click-this</i>
<i v-else class="far fa-save">save</i>
</button>
</li>
</div>
</div>
如果您不能这样做,您可以向数据添加一个新键,例如:hiddenTodos
这将是您选择隐藏的待办事项的 ids/a 唯一标识符数组。
在模板中,它将是这样的:
<button @click="hiddenTodos.push(todo)">
...
<div v-if="hiddenTodos.includes(todo)"