LoginSignup
0
0

More than 1 year has passed since last update.

Vue.jsで動的に要素変更

Last updated at Posted at 2021-05-12

配列に動的に値を追加して描画できなかったので、Obejctにしなさいよという教訓から書きます:tea:
間違い等ありましたら、ご指摘していただけると幸いです。

リアクティビティ

Vue は、配列における次の変更は検知できません:
インデックスと一緒にアイテムを直接セットする場合、例えば vm.items[indexOfItem] = newValue
配列の長さを変更する場合、例えば vm.items.length = newLength

上記の内容に引っかかって配列にひたすらpushして悩んでいました。(ちゃんとドキュメント読もうね...)
またリアクティブプロパティの宣言も行っておらず、カオスな状況でしたので原因の発見に遅れました。

Paramedit.vue
<template>
  <form id="form">
    <table border="1">
      <tr v-for="(sec, index) in task.params" :key="index">
        <td>Name</td>
        <td><input v-model="sec.Name" /></td>
        <td>Path</td>
        <td><input v-model="sec.ValueFrom" /></td>
        <td><button @click.prevent="deleteParam(index)">削除</button></td>
      </tr>
    </table>
    <a @click.prevent="addParam">追加</a>
  </form>
</template>

<script>
export default {
  data() {
    return {
      // 更新対象
      task: {
        // リアクティブプロパティの宣言必須
        // params: [],
        params: [
          { Name: "test1", ValueFrom: "test/path/1" },
          { Name: "test2", ValueFrom: "test/path/2" },
        ],
      }
    };
  },
  created() {},
  methods: {
    deleteParam: function (id) {
      let self = this;
      self.task.params.splice(id, 1);
    },
    addParam: function () {
      let self = this;
      // dataに入れておくと直前のデータが入力されていた
      let addForm = { Name: '', ValueFrom: '' };
      self.task.params.push(self.addForm);
    },
  },
};
</script>

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0