yuheijotaki.com

【学習メモ】基礎から学ぶ Vue.js その2

  • 第 3 章 イベントとフォーム入力の受け取り
  • 第 4 章 データの監視と加工

インラインメソッド

<div id="app"><button v-on:click="handleClick">click</button></div>
var app = new Vue({
  el: "#app",
  methods: {
    handleClick: function() {
      alert("clicked");
    }
  }
});

フォーム入力 双方向データバインディング

type="text"

<div id="app">
  <input type="text" v-model="message" />
  <p>{{ message }}</p>
</div>
var app = new Vue({
  el: "#app",
  data: {
    message: "Hello Vue.js!"
  }
});

<textarea>

<div id="app">
  <textarea v-model="message"></textarea>
  <pre>{{ message }}</pre>
</div>
var app = new Vue({
  el: "#app",
  data: {
    message: "Hello Vue.js!"
  }
});

type="checkbox"(単一)

<div id="app"><input type="checkbox" v-model="val" /> {{ val }}</div>
var app = new Vue({
  el: "#app",
  data: {
    val: true
  }
});

type="checkbox"(複数)

<div id="app">
  <label><input type="checkbox" v-model="val" value="A" /> A</label>
  <label><input type="checkbox" v-model="val" value="B" /> B</label>
  <label><input type="checkbox" v-model="val" value="C" /> C</label>
  <p>{{ val }}</p>
</div>
var app = new Vue({
  el: "#app",
  data: {
    val: []
  }
});

type="radio"

<div id="app">
  <label><input type="radio" value="a" v-model="val" /> A</label>
  <label><input type="radio" value="b" v-model="val" /> B</label>
  <label><input type="radio" value="c" v-model="val" /> C</label>
  <p>{{ val }}</p>
</div>
var app = new Vue({
  el: "#app",
  data: {
    val: ""
  }
});

<select>

<div id="app">
  <select v-model="val">
    <option disabled="disabled">選択してください</option>
    <option value="a">A</option>
    <option value="b">B</option>
    <option value="c">C</option>
  </select>
  <p>{{ val }}</p>
</div>
var app = new Vue({
  el: "#app",
  data: {
    val: ""
  }
});

算出プロパティ

任意に処理を含めることのできるデータ

<div id="app"><p>{{ width }}の半分は{{ halfWidth }}</p></div>
var app = new Vue({
  el: "#app",
  data: {
    width: 800
  },
  computed: {
    halfWidth: function() {
      return this.width / 2;
    }
  }
});

ウォッチャ

特定のデータまたは算出プロパティの状態の監視、変更があった場合に登録した処理の実行

<div id="app">
  <label><input type="radio" value="a" v-model="val" /> A</label>
  <label><input type="radio" value="b" v-model="val" /> B</label>
  <label><input type="radio" value="c" v-model="val" /> C</label>
</div>
var app = new Vue({
  el: "#app",
  data: {
    val: ""
  },
  watch: {
    val: {
      handler: function(newVal, oldVal) {
        console.log(oldVal);
        console.log(newVal);
      },
      deep: true, // ネストされたオブジェクトも監視する
      immediate: true // 初期読み込み時にも呼び出す
    }
  }
});

フィルタ

テキストベースの変換処理

<div id="app"><p>{{ price | localeNum }}円</p></div>
var app = new Vue({
  el: "#app",
  data: {
    price: 19800
  },
  filters: {
    localeNum: function(val) {
      return val.toLocaleString();
    }
  }
});

カスタムディレクティブ(v-hogehogeの自作、登録)はスキップ