【问题标题】:Vue JS Dynamic data and model in form inputVue JS 表单输入中的动态数据和模型
【发布时间】:2021-11-04 06:55:19
【问题描述】:

我正在尝试创建一个表单,用户可以在其中编辑他们的 cmets。输入应该显示评论的当前值(这是来自 v-for 的动态数据),但我还需要将该值绑定到模型,以便我可以将它与我的补丁请求一起发送。

目前表单是这样的

<p @click="editing = true">
     Edit comment
</p>
<form v-if="editing" @submit.prevent="editComment(comment._id)">
   <input type="text" v-model="comment.message"/>
   <button type="submit">
     Edit Comment
   </button>
 </form>

有没有办法结合 v-model 和 :value 绑定?还是一种绑定模型值并设置数据名称的方法?

【问题讨论】:

标签: javascript vue.js data-binding


【解决方案1】:

假设每条评论都在它自己的评论中呈现,这将是您可以使用的一种方法(未经测试):

父组件:

<template>
  <div>
    <Comment 
      v-for="comment in comments"
      :key="comment._id"
      :comment="comment"
      @on-update="onUpdateComment"
    />
  </div>
</template>

<script>
  export default {
    data () {
      return {
        comments: [] // Could be also a computed property, or you populate the array somewhere in this component
      }
    },

    methods: {
      onUpdateComment({ commentId, value }) {
        // Perform update
      }
    }
  }
</script>

子组件(评论):

<template>
  <div>
    {{ comment.message }}

    <p @click="onClickEdit">
        Edit comment
    </p>

    <form v-if="editing" @submit.prevent="editComment">
      <input type="text" :value="updatedCommentMessage"/>

      <button type="submit">
        Edit Comment
      </button>
    </form>
  </div>
</template>

<script>
  export default {
    props: {
      comment: {
        type: Object
      }
    },

    data () {
      return {
        editing: false,
        updatedCommentMessage: ''
      }
    }

    methods: {
      onClickEdit () {
        this.editing = true
        this.updatedCommentMessage = this.comment.message
      },

      editComment () {
        this.$emit('on-update', { commentId: this.comment.id, value: this.updatedCommentMessage})
      }
    }
  }
</script>

将绑定到输入的消息存储在它自己的变量中的好处是,您可以轻松地取消操作,只需重置updatedCommentMessage 变量。

【讨论】:

  • 在设置 updatedCommentMessage 时返回错误“TypeError: Cannot read properties of undefined (reading 'message')”。但是我看不到评论道具将如何访问动态数据
  • 我已经更新了我的帖子,所以你最好明白我的意思。父组件包含实际的 cmets,这些 cmets 会向下传递给子组件。如果发生任何更新,需要通知父组件
  • 我明白了。这不是我一直在做的结构。我一直将帖子和评论放在同一个组件中,但我想将它们分开是使此操作生效的最佳方式
  • 我建议这样做。它更容易维护。但是,它也应该适用于将所有内容都放在同一个组件中。这有点棘手,因为您需要跟踪当前更新了哪些评论(因此您需要注意设置和重置值)
猜你喜欢
  • 1970-01-01
  • 2020-08-20
  • 2016-04-25
  • 2020-08-02
  • 1970-01-01
  • 2021-01-28
  • 2021-12-15
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多