フォーム入力バインディングを理解する その2

何年か前に jQuery で作った type tester という簡易的なフォント(関連のスタイリング)のテスターツールを Vue.js で作ってみる。 その2
GitHub Pages: https://yuheijotaki.github.io/type-tester/
GitHub リポジトリ:https://github.com/yuheijotaki/type-tester
フォーム要素をバインドしてスタイル変更
App.vue(一部簡略化)
<template>
<div id="app">
<div>
<inputFontSize @change="changeFontSize"></inputFontSize>
</div>
<div>
<div v-bind:style="styleObject">ここにテキストが入ります。</div>
</div>
</div>
</template>
<script>
import inputFontSize from './components/input-fontSize'
export default {
name: 'App',
components: {
inputFontSize
},
data() {
return {
styleObject: {
color: 'red',
fontSize: '16px'
}
}
},
methods: {
changeFontSize: function (size) {
this.styleObject.fontSize = `${size}px`;
}
}
}
</script>
input-fontSize.vue(一部簡略化)
<template>
<div>
FontSize: <input
type="number"
min="10"
:value="fontSize"
@input="updateValue"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
> px
</div>
</template>
<script>
export default {
name: 'inputFontSize',
data() {
return {
fontSize: 16,
}
},
methods: {
updateValue(e) {
this.$emit('input', e.target.value)
this.$emit('change', e.target.value)
}
}
}
</script>
style オブジェクト を使ってインラインスタイル
公式ドキュメント の通りですが、
data() {
return {
styleObject: {
color: 'red',
fontSize: '16px'
}
}
}
と定義して
<div v-bind:style="styleObject"></div>
のようにバインドできる。
親側の変更監視のメソッドは
methods: {
changeFontSize: function (size) {
this.styleObject.fontSize = `${size}px`;
}
}
とする。
次やること
<input type=“text”> と <input type=“range”> を組み合わせて双方向のバインディングを行う
参考: vuejs + input range