Todos os exemplos dados defineModel
nos documentos do Vue estão relacionados ao uso de entradas de dados. Eu queria saber se essa construção também poderia ser usada em outro lugar, evitando assim o método um tanto complicado de adereços/emissão de troca de dados entre pai e filho:
(aplicativo.vue):
<script setup lang="ts">
import { ref } from 'vue'
import MyComponent from './MyComponent.vue'
const title = ref('v-model argument example with array')
const array = ref([1,2,3,4,5]);
</script>
<template>
<h1>{{ title }}</h1>
<MyComponent v-model:array = "array" />
<h2>Parent array: {{array}}</h2>
</template>
(meuComponent.vue):
<script setup lang="ts">
const array = defineModel('array')
function ShortenArray() {
array.value = array.value.slice(1);
}
</script>
<template>
<button @click="ShortenArray">Shorten Array</button>
<p></p>
child array: {{ array }}
</template>
Este código é executado conforme o esperado, mas há um erro de digitação Property 'slice' does not exist on type 'unknown'
fornecido para array.slice()
, que não consigo resolver.
Você precisa adicionar o tipo ao seu defineModel, neste caso pode ser um array de números: