🗒️

【Nuxt.js/Vue.js v2】v-for内で配列の要素をv-modelに使用したい

2021/03/17に公開

v-for内で取り出される要素を直接v-modelに使用してみる

<div v-for='(item, index) in itemList' :key='index'>
  <input v-model='item' placeholder=''>
</div>

一見問題なさそうですが、以下のエラーメッセージが表示されます。

You are binding v-model directly to a v-for iteration alias. This will not be able to modify the v-for source array because writing to the alias is like modifying a function local variable. Consider using an array of objects and use v-model on an object property instead.

Google翻訳:
v-modelをv-for反復エイリアスに直接バインドしています。エイリアスへの書き込みは関数のローカル変数の変更に似ているため、これはv-forソース配列を変更できません。オブジェクトの配列を使用することを検討し、代わりにオブジェクトプロパティでv-modelを使用してください。

・・・ つまり、v-forで反復中の要素はコピーなので、元の配列を変更することができないということです。

indexを使用して元の配列の要素を直接参照するよう変更

以下のようにすることでエラーが解消する。

<div v-for='(item, index) in itemList' :key='index'>
  <input v-model='itemList[index]' placeholder=''>
</div>

Discussion