こんにちわ、みけです。
vue.jsをいじりはじめてから5日目(途中呆けていた日があるので、都合3日目)ですが、やっとvue.jsの概要がだいたいわかってきた気がしたので、チケット管理アプリっぽいものを作ってみました。
とりあえず、今日まででよく使っているvue.jsの要素のメモをまとめておきたいと思います。
v-repeat
要素を反復させるときに使います。
<div class="navbar-collapse collapse"> <ul class="nav navbar-nav" id="navigation"> <li v-repeat="navigation" class="{{now? 'active': ''}}"> <a v-attr="href: href" v-text="title"></a> </li> </ul> </div>
new Vue({ el: "#navigation", data: { navigation: [{ now: true, href: "bootstrap.html", title: "Home" }, { now: false, href: "bootstrap.html", title: "About" }, { now: false, href: "bootstrap.html", title: "Contact" }] } });
ポイントは次のとおり
Vue
オブジェクトを作成するときに、el
に反復させる要素の親要素のid
名を指定します。- 反復させる配列(上の例では
navigation
)のキー名をv-repeat
の属性値として設定します。 - 反復させる要素では、表示させたい値の場所に、オブジェクトのキー値(上の例では
title
やhref
など)を設定します。 - また条件によって値を表示したりする場合は、mustachっぽい記号(
{{}}
)の中に三項演算子のように記述できます(上の例ではnow
)。
v-model
フォームの値はv-model
を用いると簡単にバインディングできます。
<div class="form-group" id="input"> <!-- titleとバインディング --> <input type="text" id="title" v-model="title" class="form-control" placeholder="チケットの名前"/><br/> <!-- detailとバインディング --> <textarea id="detail" rows="4" v-model="detail" class="form-control" placeholder="詳細を記入"></textarea><br/> <!-- typeとバインディング --> <select id="type" v-model="type" class="form-control"> <option value="--" selected="selected">--</option> <option v-repeat="items" value="{{value}}">{{name}}</option> </select><br/> <!-- ボタンを押してメソッドを呼び出し --> <button type="button" class="btn btn-primary" v-on="click: addItem">追加</button> </div>
// フォームとバインディング new Vue({ el: "#input", data: { title: "", detail: "", type: "--" }, methods: { addItem: function() { if (title.value === "" || type.value === "--") { return; } var issue = Issue(this.title, this.detail, type.value); issues.items.push(issue); this.title = ""; this.detail = ""; type.selectecIndex = 0; } } }); // select用のオブジェクト new Vue({ el: "#type", data: { items: [ { value: "bug", name: "バグ" }, { value: "issue", name: "やること" }, { value: "require", name: "要望" } ] } });
ポイントは次のとおり
Vue
オブジェクトを作成するときに、フォームが含まれる要素の親要素のid
名を指定します(大抵はform
要素ですが、ここではdiv
にしています)。- オブジェクトのキー値を、バインディングさせるフォームの
v-model
属性に設定します。 - クリックなどのイベントは
Vue
オブジェクトのmethods
にあるメソッドにハンドリングさせることができます。 - メソッドの中ではキー値の名前を持つvariableにhtmlオブジェクトが割り当てられています(実はここ、valueが入っていると思ってハマった)。
なお、ここでissues
という謎のオブジェクトが出てきていますが、これは別の場所で生成したVue
オブジェクトで、別の場所の要素に対応させています。その結果、このボタンをクリックした時に、別の場所に新しい要素が作成されたように見えます。
動かした時のイメージはこんな感じ。
以上
作ったやつはgithubにあります。
【2014/10/30 10:30修正】なんかVue
オブジェクトで定義しているデータについては、this.title
のようにアクセすることできたので、2つ目のサンプルのコード修正した