如何将其他兄弟姐妹的值更改为vue?

朵拉

使用 vue 与待办事项列表一起玩。

在这个阶段,我可以用编辑按钮显示列表,文本将是一个输入,所以我可以编辑待办事项。但是例如,如果我有 10 个项目,并且我单击了项目 2、项目 4 和项目 5 的编辑,那么所有这 3 个项目都将变为输入。

我在想的是,如果我单击第 4 项,则第 2 项将变回文本,因此如果单击编辑,则只有一项将显示输入。

我的模板代码如下

<td class="col-8">
  <!-- if editable is false, show the checkbox and todo item -->
  <div class="custom-control custom-checkbox" v-if="!editable">
      {{ todo.item }}
  </div>

  <!-- if editable is true, turn item into an input so user can enter new value -->
  <div v-else>
    <input ref="editItem" type="text" class="form-control" :value="todo.item" @input="onInput">
  </div>
</td>
<td class="col-2">
  <button
    class="btn btn-sm"
    :class="editable ? 'btn-outline-success' : 'btn-outline-info'"
    @click.prevent="editable ? onSave() : onEdit()">{{ editable ? 'save' : 'edit' }}
  </button>
</td>

当我在 chrome 中打开 vue 检查时,我可以看到所有项目都有不同的数据值。我怎样才能改变其他兄弟姐妹的价值?

在此处输入图片说明

在此先感谢您的任何建议和建议。

德瓦尼尔沙阿

我不建议您更改另一个兄弟姐妹的值,因为您无法确定它可能导致的副作用,显然当您查看待办事项列表时,会感觉没有副作用,但总的来说实践中,一个节点应该改变父系中位于它之下的元素,既不高于也不在兄弟姐妹。

如果你想改变上面的元素,它总是通过事件驱动。你让父母知道有些事情需要改变,而不是自己改变。

这是您可以在此处执行的操作:

  1. 而使用editable作为数据属性,把它作为一个支柱到TodoListItem组件。
    props: {
      editable: {
        type: Boolean,
        default: false
      },
    }
  1. 当在子组件中单击 Save/Edit 按钮时,与其更改值本身,不如使用这样的事件。
/** You should keep a deepCopy of the props if you are changing the state
 of that object and then send the updated local data prop to the parent 
 as well for updation rather than changing the prop object.
 NEVER CHANGE THE PROP OBJECT DIRECTLY. -> this.todoItem = 
 this.deepCopy(this.todo); 
 Do this in before mount hook of the child component.
**/
this.$emit('todo-item-action', action, todoItem);
  1. 发出此事件后,在父TodoList组件中,捕获此事件并更改项目的状态,如下所示:
      <todo-list-item
        v-for="todo in todos"
        :key="todo['id']"
        :todo="todo"
        :editable="todo['editable']"
        @todo-item-action="handleItemAction"
      >

或者如果你不想改变 todo 对象。在这里,您可以确保 editableItem 是null在未选择任何内容或仅引用活动项目 ID 的情况下,以便道具将更改并且其他列表项目将自动变为不可编辑。

      <todo-list-item
        v-for="todo in todos"
        :key="todo['id']"
        :todo="todo"
        :editable="editableItem === todo['id']"
        @todo-item-action="handleItemAction"
      >

您通过事件和道具驱动组件的次数越多,它的可重用性就越高。始终有一个协调器组件,它stateless通过处理由它们传播的事件并通过 props 发送状态来操纵这些组件。

这是我一直遵循的方法,它总是让我能够干净、快速地重构。

问候。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在React中更改无线电输入后,如何从其他嵌套兄弟姐妹中删除className?

XSLT复制相同的兄弟姐妹,直到出现其他兄弟姐妹

将“后裔”关系更改为“兄弟姐妹”关系

如何将点击事件与兄弟姐妹分开?

在Vue兄弟姐妹之间传递数据

在使用Entity Framework更新单个列时,如何防止将其他列值更改为表?

如何与兄弟姐妹共享变量?

jQuery兄弟姐妹如何删除类?

使用绝对值将元素放置在其他元素内。元素是兄弟姐妹

使用jQuery访问“特定行”中的其他兄弟姐妹

跟随所有p标签,除非出现其他类型的兄弟姐妹并停止

slideToggle 兄弟姐妹其他人打开 div

xpath 查询以通过搜索值数组来获取其他兄弟姐妹

当任何其他兄弟姐妹在其中选择了类 .selected 时,不要向上滑动该特定兄弟姐妹的手风琴

绝对定位一个兄弟姐妹时如何保留兄弟姐妹元素的位置?

ElementTree Python:如果兄弟姐妹嵌套,如何提取兄弟姐妹?

我们如何在下拉列表更改时获得兄弟姐妹的输入值

在鼠标悬停时更改兄弟姐妹背景

无法在ReactJS中相互更改兄弟姐妹的值

兄弟姐妹的HTML属性不会随JS更改

如何将值更改为丢失

如何将ssh更改为其他来宾

如何将时间格式更改为其他格式?

如何将REL属性更改为其他

如何将名称“onEdit”更改为其他名称?

迪夫的兄弟姐妹

隐藏兄弟姐妹选择

创建sqlarchicalid兄弟姐妹

兄弟姐妹体内的硒