<template> <input v-model="inputValue" class="preview-navigation-bar-input" :class="{ 'preview-navigation-bar-input--invalid': invalidValueForType, }" /> </template> <script> import _ from 'lodash' export default { props: { defaultValue: { type: [String, Number, Array], required: false, default: '', }, validationFn: { type: Function, required: true, }, }, data() { return { value: this.defaultValue, invalidValueForType: false, } }, computed: { inputValue: { get() { return this.value }, set(inputValue) { this.invalidValueForType = false this.value = inputValue try { this.$emit('change', this.validationFn(this.value)) } catch (error) { this.invalidValueForType = true } }, }, }, watch: { defaultValue(newValue) { if (!_.isEqual(this.inputValue, newValue)) { this.inputValue = newValue } }, }, } </script>