javascript - Vue.js 编辑动态组件中的变量

标签 javascript dynamic vue.js vuejs2 vue-component

我想制作一个对象列表。 (列表中的)每个元素都由子组件可视化。我的目标是创建一个动态列表,我可以在其中编辑元素。

我有一个父组件<contacts-list-form>什么有一组联系人并在 <contact-element-form> 中动态地向我显示它们:

<contact-element-form v-for="contact in contacts" :key="contact.id" :contact="contact"></contact-element-form>

contact-element-form 看起来像这样:

<template lang="html">
  <md-card>
    <md-card-header>
      <div class="md-title">Contact</div>
        <md-icon @click="removeMyself">remove</md-icon>
    </md-card-header>
      <md-card-content>
        <md-input-container>
          <md-icon>person</md-icon>
          <label>contactName</label>
          <md-input name="contactName" v-model="contact.name" required />
        </md-input-container>

        <md-input-container>
          <md-icon>email</md-icon>
          <label>contactEmail</label>
          <md-input name="contactEmail" v-model="contact.email" required />
        </md-input-container>

        <md-input-container>
          <md-icon>phone</md-icon>
          <label>contactPhoneNumber</label>
          <md-input name="contactPhoneNumber" v-model="contact.phoneNumber" required />
        </md-input-container>
    </md-card-content>
  </md-card>
</template>

<script>
export default {
  props: ["contact"],
  data() {
    return {
      contact: {},
    }
  },
  methods: {
    removeMyself() {
      console.debug(this.contact.id + ". id will be removed.");
      // it will emits to its parent.
    }
  },
  create() {}
}
</script>

<style lang="css">
</style>

我怎样才能获得每个<contact-element-form>的数据是可编辑的,父级 ( <contacts-list-form> ) 会注意到这一点,并将修改发送到服务器。

感谢您的回答,并提前提出建议!

最佳答案

为了实现单向数据流,这是实现您正在寻找的内容的一种方法:

  • 父级将 prop 传递给子级
  • 父级注册 v-on:childUpdate="parentUpdate"事件监听器
  • 当子级发生变化时,子级会发出一个 childUpdate 事件,将新值传递给父级
  • 只要子进程调用childUpdate,父进程就会执行parentUpdate
  • 父级将数据发送到服务器等等
  • 父级更新自己的状态来表示更改
  • 传递给子级的 prop 现在会在数据流动一天后自动更新

描述的最后一部分很重要:子级不会进行本地修改,而是通过向父级发出事件和新值以及负责更新联系方式的父级来进行修改。由于联系人是传递给子级的 prop,因此子级的状态会自动更新。

这里有一个例子 https://v2.vuejs.org/v2/guide/components.html#Using-v-on-with-Custom-Events

另一种方法是使用 v-model,可以从链接部分下面的文档中找到它。

关于javascript - Vue.js 编辑动态组件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429966/

相关文章:

javascript - 按属性对对象数组进行排序以匹配提供的列表

javascript - 如何显示选择列表中的字段

javascript - 简单的 JavaScript 交换函数

java 多态性不起作用,我错过了什么?

php - 是否可以动态更改网页的 URL?

http - Vue 代理设置不起作用

javascript - 如果没有子元素,通过JQuery隐藏元素中的所有文本

java - post查询的动态过滤条件

javascript - 如何在 v-html 之间切换并在 vue.js 中以纯文本形式插入?

laravel - 在 url Vuejs 中放置分页号