2017-10-15
[Vue.js] 見た目をカスタマイズしたチェックボックスの実装例
ソース
HTML
<label class="m-check">
<input
type="checkbox"
class="m-check_input"
:checked="value"
@change="updateValue($event.target.checked)"
>
<span class="m-check_body">
<span class="m-check_square"></span>
<span class="m-check_txt">
<slot></slot>
</span>
</span>
</label>
JS
Vue.component('check-component', {
data: function() {
return {};
},
props: ['value'],
methods: {
updateValue: function(value) {
this.$emit('input', value);
},
},
template: '#tpl-check',
});
呼び出し方
<check-component v-model="isAgree">利用規約に同意する</check-component>
解説
上記リンクに記載の通り、
<check-component v-model="isAgree">利用規約に同意する</check-component>
は以下の糖衣構文になる。
<check-component
:value="isAgree"
@input="function(value) {isAgree = value}"
>
利用規約に同意する
</check-component>
なので、check-component
に対して必要な作業は
isAgree
とバインディングするprop
としてvalue
を追加- チェックボックスの状態が変化した際に、
input
イベントをチェックボックスの現在の状態と共に emit
である。
これに従って実装すれば前述のようなソースになる。