Esta é uma "aula" onde faremos um ajuste no nosso Component Range.
O aluno Fábio notou um detalhe muito importante, da forma que implementamos o nosso campo personalizado na aula, a "label" dele não "reage" ao reset do formulário.
O motivo é bem simples: nós criamos um estado local dentro da instância do component:
data() {
return {
valorAtual: this.valor || this.$attrs.min
}
},E baseamos nossa Computed Property nesse estado:
computed: {
customLabel() {
return `${this.label} (R$ ${this.valorAtual})` // aqui
}
},A consequência disso é que ao resetar o formulário, somente a prop "valor" é atualizada, a prop "label" não, e portanto a Computed Property não precisa ser recalculada.
Para ajustar isso é muito simples:
Vamos remover o estado local do Component
E vamos passar a basear nossa Computed Property na prop "value"
O Component fica assim:
<template>
<div>
<label>{{ customLabel }}</label>
<input
type="range"
v-bind="$attrs"
:value="valor"
:class="inputClasses"
@change="atualizar"
>
</div>
</template>
<script>
export default {
inheritAttrs: false,
model: {
prop: 'valor',
event: 'change'
},
props: {
label: String,
valor: [Number, String],
inputClasses: [String, Object, Array]
},
computed: {
customLabel () {
return `${this.label} (R$ ${this.valor || this.$attrs.min})`
}
},
methods: {
atualizar (event) {
const valor = event.target.value
this.$emit('change', valor)
}
}
}
</script>Façam os testes, qualquer dúvida postem no fórum do curso.
Grande abraço,
Plínio Naves