フォーム入力バインディングを理解する その6
何年か前に jQuery で作った type tester という簡易的なフォント(関連のスタイリング)のテスターツールを Vue.js で作ってみる。 その6
GitHub Pages: https://yuheijotaki.github.io/type-tester/
GitHub リポジトリ:https://github.com/yuheijotaki/type-tester
<input type="color">
のバインディング
これも v-model=""
でバインディングが可能
input-color.vue
(一部簡略化)
<template> <div> Color: <input type="color" v-model="color" @input="updateValue" @focus="$emit('focus', $event)" @blur="$emit('blur', $event)" > <input type="text" v-model="color" @input="updateValue" @focus="$emit('focus', $event)" @blur="$emit('blur', $event)" > </div> </template> <script> export default { name: 'inputColor', data() { return { color: '#000000' } }, methods: { updateValue(e) { this.$emit('input', e.target.value) this.$emit('change', e.target.value) } } } </script>
すこし課題
<input type="color">
と <input type="text">
を双方向にバインディングする場合は #000
など短縮カラーコードではなく #000000
など6桁で入力されていないと color側が バインディング(同期)がされない。HTML側の仕様といえば仕様なのですが、
- 短縮カラーコードが入力された場合は6桁に変換
- カラーコード以外が入力された場合は、元のセットされていた値を復元
を余裕あったら実装したい
次やること
- 和文テキストのデフォルト、欧文テキストのデフォルトをそれぞれ用意、自由入力欄も残して選択式でテキスト表示をする