Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Vue.js 入門 vol.5 フォーム入力バインディング

参考サイト

https://jp.vuejs.org/v2/guide/forms.html

フォーム入力バインディング

  • formのinput要素と、textarea要素で、two-way binding を作成するには、v-modelを使うことができる。(初期値は無視する。)

  • テキストの例

<input v-model="message" placeholder="edit me">
<p>Message is : {{ message }}</p>
  • 複数行テキスト
<span>Multilien message is:</span>
<p style="white-space: pre">{{ message }}</p>
<br>
<textarea v-model="message" placeholder="add mutiple lines"></textarea>
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
new Vue({
  el: '...',
  data: {
    checkedNames:[]
  }
})
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>
  • 選択
<select v-model="selected">
  <option disabled value="">Please select one</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
  el: '...',
  data: {
    selected: ''
  }
})
  • 複数の選択(配列に束縛)
<select v-model="selected" multiple>
  <option>A</option>
  <option>B</option>
  <option>C</option>  
</select>
<br>
<span>Selected: {{ selected }}</span>
  • 動的オプションは、v-forで描画できる。
<select v-model="selected">
  <option v-for="option in options" v-bind:value="option.value">
    {{ option.text }}
  </option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
  el: '...',
  data: {
    selected: 'A',
    options: [
      { text: 'One', value: 'A' },
      { text: 'Two', value: 'B' },
      { text: 'Three', value: 'C'}
    ]
  }
})

値のバインディング

  • radio, checkbox, selectは、valueを返す。
<!-- チェックされたとき、`picked` は文字列"a"になります -->
<input type="radio" v-model="picked" value="a">
<!-- `toggle` は true かまたは false のどちらかです -->
<input type="checkbox" v-model="toggle">
<!-- 選択されたとき、`selected` は文字列"abc"です -->
<select v-model="selected">
  <option value="abc">ABC</option>
</select>
  • チェックボックスで、データを動的に変更したいときは、v-bindを使う。(true-value, false-valueがそれぞれのチェックがついたときに返すvalueの値。文字列a/bを代入している。)
<input
  type="checkbox"
  v-model="toggle"
  v-bind:true-value="a"
  v-bind:false-value="b"
>
// チェックされたとき:
vm.toggle === vm.a
// チェックがはずれされたとき:
vm.toggle === vm.b
<input type="radio" v-model="pick" v-bind:value="a">
vm.pick === vm.a
  • 選択オプション
<select v-model="selected">
  <option v-bind:value="{ number: 123}">123</option>
</select>
//選択したとき
typeof vm.selected // -> 'object'({number:123 }
vm.selected.number // -> 123

修飾子

  • .lazy (inputイベント時ではなく、changeイベント後に実行される(同期される))
<input v-model.lazy="msg">
  • .number (数値として型変換したいときに使う): これは結構重要で、基本的に、input tagに、type=numberと書いていても、文字列を返すから。
<input v-model.number="age" type="number">
  • .trim 自動的にトリムする時に使える。
<input v-model.trim="msg">

まとめ

  • v-modelは、input, textareaで基本的に使う。