【问题标题】:Vuejs Add Table Row Dynamically - Save Row ProblemVuejs动态添加表格行 - 保存行问题
【发布时间】:2021-01-22 08:59:53
【问题描述】:

只要单击Add Button,我就会将<tr> 元素附加到我的表中。单击“添加”按钮时,我会创建 7 个<input type="text"> 来为各个列键入。我也有DeleteDelete All 功能,它们都很好用。这是我的桌子;

<tr v-for="(table, index) in table" :key="index">
              <td>
                <span class="sidebar-icons">unfold_more</span>
              </td>
              <td>
                <input v-model="table.test1" placeholder="Test1" />
              </td>
              <td>
                <input v-model="table.test2" placeholder="Test1" />
              </td>
              <td>
                <input v-model="table.test3" placeholder="Test1" />
              </td>
              <td>
                <input v-model="table.test4" placeholder="Test1" />
              </td>
              <td>
                <input v-model="table.test5" placeholder="Test1" />
              </td>
              <td>
                <input v-model="table.test6" placeholder="Test1" />
              </td>
              <td>
                <input v-model="table.test7" placeholder="Test1" />
              </td>
              <td>
                <button @click="deleteRow(index)" type="button">Delete</button> 
                <button @click="applyRow()" type="button">Apply</button> 
              </td>
            </tr>

这是我的方法;

 data(){
      return {
        table: []
      }
    },
    components: {
    methods: {
      deleteAll() {
        this.table = [];
      },
      addRow() {
        this.table.push({
          test1: "",
          test2: "",
          test3: "",
          test4: "",
          test5: "",
          test6: "",
          test7: "",
        });
      },
      deleteRow(index){
        this.table.splice(index, 1);
      },
      applyRow(){
        
      }
    }

这是我的问题,当我点击添加按钮时,我触发了AddRow() 方法(我没有在此处放置添加和删除全部按钮,它们与问题无关。)

当触发 AddRow 时,会创建输入,我可以在其中输入内容,但如您所见,applyRow() 函数为空。我想要做的是,当单击应用按钮时,我希望文本显示在 &lt;p&gt;&lt;/p&gt; 中,换句话说,当单击应用时,我不想再看到任何 &lt;input type=text&gt;。我希望它们被视为段落。我只想在单击添加按钮添加新行时查看输入。如何创建这个applyRow() 方法?

【问题讨论】:

  • 您希望能够一次创建多行吗?还是一次只有一个?
  • 我一次只添加一行。

标签: vue.js appendchild


【解决方案1】:

您可以通过在添加新行时创建标志来实现此目的

 addRow() {
        this.table.push({
          test1: "",
          test2: "",
          test3: "",
          test4: "",
          test5: "",
          test6: "",
          test7: "",
          applied: false,
        });
      },

你的 applyRow() 方法应该是这样的

applyRow(index){
       this.table[index].applied = true; 
}

并更改您的模板,例如

<tr v-for="(table, index) in table" :key="index">
              <td>
                <span class="sidebar-icons">unfold_more</span>
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test1" placeholder="Test1" />
                <p v-else>table.test1</p>
    enter code here
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test2" placeholder="Test1" />
                <p v-else>table.test2</p>
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test3" placeholder="Test1" />
                <p v-else>table.test3</p>
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test4" placeholder="Test1" />
                <p v-else>table.test4</p>
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test5" placeholder="Test1" />
                <p v-else>table.test5</p>
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test6" placeholder="Test1" />
                <p v-else>table.test6</p>
              </td>
              <td>
                <input v-if="!table.applied" v-model="table.test7" placeholder="Test1" />
                <p v-else>table.test7</p>
              </td>
              <td>
                <button @click="deleteRow(index)" type="button">Delete</button> 
                <button v-if="!table.applied" @click="applyRow(index)" type="button">Apply</button> 
              </td>
            </tr>

【讨论】:

  • 我做了几乎相同的事情,但我忘记将索引放在 applyRow 函数中,它显示和隐藏每一行。现在它很完美。感谢您的回复。
  • 应用按钮点击后想隐藏怎么办?我的意思是,当我填写所有 7 个输入时,我单击应用并插入该行。那时,我不需要看到应用按钮。
  • 也为该按钮添加一个 v-if
  • 好的最后一个问题 :) 我的表格中还有一个可拖动的功能,因此我可以在需要时将行拖动到上方或下方等...所以如果我将第二行放在上面,则第一行一个人的 ID 为 2,第二行的 ID 为 1。如何自动提供 ID 信息。添加的第一行是 1,第二行是 2,依此类推。我的意思是,让我们阻止用户输入 ID 并提前提供。我该怎么做?
  • 将 :id="index" 添加到您的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多