Vue.jsでHTML属性に値を入れようとして少し迷ったのでメモ。
サンプルコード
personsというデータを用意して、ループで処理してみます。
JavaScript
var app = new Vue({ el: '#list', data: { persons: [ { id: 'akira', name: '大野 晶', }, { id: 'koharu', name: '日高 小春', } ] } })
通常のテキストであれば{{ }}を使ったMustache構文で記述するので、属性も同様にしていました。
HTML
<div id="list"> <ol> <li v-for="person in persons" id="{{ person.id }}"> {{ person.name }} </li> </ol> </div>
li内のテキストはきちんと出力されますが、idは出力されず、{{ person.id }}がそのままになっていました。
うまくいかなかった場合のデモページ
Mustache構文はHTML属性内では使えないので、代わりにv-bindディレクティブを使うようです。
HTML
<div id="list"> <ol> <li v-for="person in persons" v-bind:id="person.id"> {{ person.name }} </li> </ol> </div>
idが意図した形で出力されました。
idを出力するデモページ
hrefなどの場合も同様で、以下のようになります。
HTML
<div id="list"> <ol> <li v-for="person in persons"> <a v-bind:href="person.id + '.html'"> {{ person.name }} </a> </li> </ol> </div>
ちなみに、v-bindは以下のように省略して記述できます。
HTML
<div id="list"> <ol> <li v-for="person in persons" :id="person.id"> <a :href="person.id + '.html'"> {{ person.name }} </a> </li> </ol> </div>
【参考サイト】
コメントが承認されるまで時間がかかります。