我只想显示一个点击的输入(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)"