基礎からメモ: Vue.js CH2-p74 条件分岐を使ったリストの描画、フォームからリストへの要素の追加
条件を使ったクラスの操作
リストの各要素に条件を適用する方法。
リストデータのうち特定のプロパティが条件に合うものだけを操作する。
hp
プロパティが300より大きい場合.tuyoi
クラスを付与して「強い!」の文字を表示する。
[index11.html]
<div id="app"> <ul> <li v-for="item in list" v-bind:key="item.id" v-bind:class="{ tuyoi: item.hp > 300 }"> ID: {{ item.id }} {{ item.name }} HP: {{ item.hp }} <span v-if="item.hp > 300"> 強い!</span> </li> </ul> </div>
[main11.js]
var app = new Vue({ el: '#app', data: { list: [ { id: 1, name: 'スライム', hp: 100 }, { id: 2, name: 'ゴブリン', hp: 200 }, { id: 3, name: 'ドラゴン', hp: 500 }, ], }, })
Vueインスタンスのクラスは前のとほとんど同じ。 表示結果はこうなる。
- ID: 1 スライム HP: 100
- ID: 2 ゴブリン HP: 200
- ID: 3 ドラゴン HP: 500 強い!
条件に合う要素のみ表示する
v-for
を使っているタグに直接v-if
で条件を付ける。hp
が300以上だと表示されない。
<div id="app"> <ul> <li v-for="item in list" v-bind:key="item.id" v-if="item.hp < 300"> ID: {{ item.id }} {{ item.name }} HP: {{ item.hp }} </li> </ul> </div>
表示結果:
- ID: 1 スライム HP: 100
- ID: 2 ゴブリン HP: 200
リストの更新
注意: 次の方法では更新を検知できない。
- インデックスを使った配列要素の更新
- 後から追加されたプロパティの更新
this.list = [] // OK this.list[0].name = 'New' // OK this.list[0] = 'New' // NG
要素の追加
新しい要素の追加はpush
やunshift
を使う
this.list.push(新しい要素)
v-model
ディレクティブでフォームから新しい名前を取得し、ボタンクリックで追加
<!-- フォームからモンスターを追加 --> <p>追加する名前: <input v-model="name"> <button v-on:click="doAdd">モンスターを追加</button> </p> <ul> <li v-for="item in list" v-bind:key="item.id" > ID: {{ item.id }} {{ item.name }} HP: {{ item.hp }} </li> </ul>
ボタンクリックでmethods
オプションに定義されたdoAdd
メソッドが起動し、フォーム入力された新しい名前の要素がリストに追加される。
- 新しい名前は
app.name
に代入される。 - 新しい要素のIDは、その時点でのリストの一番大きな要素のIDに+1したもの。
hp
プロパティは500で固定。
var app = new Vue({ el: '#app', data: { name: 'キマイラ', list: [ { id: 1, name: 'スライム', hp: 100 }, { id: 2, name: 'ゴブリン', hp: 200 }, { id: 3, name: 'ドラゴン', hp: 500 } ] }, methods: { doAdd: function() { // リスト内で一番大きいIDを取得 var max = this.list.reduce(function(a, b) { return a.id > b.id ? a.id : b.id }, 0); this.list.push({ id: max + 1, name: this.name, hp: 500 }); }, } })
ボタンクリックでinputフォームの新しい名前(初期値”キマイラ”)を追加した。
追加する名前:
- ID: 1 スライム HP: 100
- ID: 2 ゴブリン HP: 200
- ID: 3 ドラゴン HP: 500
- ID: 4 キマイラ HP: 500
v-bind
やv-if
を使って、リスト表示の際に特定の要素を条件操作できる。- 新しい要素の追加は
push
やunshift
を使う。v-model
ディレクティブでフォームから新しい名前を取得できる。- ボタンクリックで
methods
オプションに定義されたメソッドを起動し、リストに要素を追加できる。