Всем привет.
Есть компонент Input
<script setup>
import { ref } from '@vue/reactivity';
const props = defineProps({
type: {
type: String,
default: 'text',
},
label: {
type: String,
required: false,
},
placeholder: {
type: String,
required: false,
},
value: {
type: [String, Number],
required: false,
},
behaviour: {
type: String,
required: false,
},
error: {
type: String,
required: false,
},
});
const emits = defineEmits(['change']);
const current = ref(props.value);
function changeHandler() {
emits('change', current);
}
</script>
<template>
<div class="input">
<label v-if="label" :for="value">{{ label }}</label>
<input
:id="value"
:type="type"
:placeholder="placeholder !== undefined ? placeholder : null"
:class="[
{ 'input--success': behaviour === 'success' },
{ 'input--error': behaviour === 'error' },
]"
v-model="current"
@change="changeHandler"
/>
<p v-if="error" class="input__message input__message--error">
{{ error }}
</p>
</div>
</template>
И страница, где используется этот компонет
<script setup>
import Input from "../components/ui/Input.vue";
import Checkbox from "../components/ui/Checkbox.vue";
import {items} from "../data/lorem-ipsum";
import {computed, watch} from "@vue/runtime-core";
import {ref} from "@vue/reactivity";
const count = ref(1);
const filtered = computed(() => {
const result = items.slice(0, count.value);
return result;
})
function changeCount(value) {
count.value = value;
}
</script>
<template>
<div class='lorem-ipsum'>
<div class="container">
<h1 class="title">Lorem ipsum generator</h1>
<header class="lorem-ipsum__header">
<span>Paragraphs: </span>
<Input type="number" :value="count" @change="changeCount"/>
</header>
<div class="lorem-ipsum__filter">
<Checkbox label="Use title" value="title"/>
<Checkbox label="Use subtitle" value="subtitle"/>
<Checkbox label="Use text" value="text"/>
<Checkbox label="Use footer" value="footer"/>
</div>
<ul class="lorem-ipsum__list" v-if="filtered.length">
<li v-for="({id, title, subtitle, text, date}) in filtered" :key="id">
<h2>{{ title }}</h2>
<h3>{{ subtitle }}</h3>
<p>{{ text }}</p>
<footer>Date: ({{ date }})</footer>
</li>
</ul>
</div>
</div>
</template>
Проблема в том что, когда меняю input, то count в родителе тоже меняется, но computed нет, почему?
Добавил sandbox
Sandbox