Во-первых, вы не можете иметь вычисляемое свойство и свойство данных с тем же именем. Поскольку как вычисляемые свойства, так и свойства данных заканчиваются как свойства одного и того же объекта состояния, одно перезапишет другое.
Во-вторых, и я думаю, что вы сделали это из-за первой точки в вычисленном alias
геттере, Вы снова ссылаетесь на alias
, который, по сути, ссылается на себя, и похоже, что он может дать некоторые противоречивые возвращаемые значения.
Я могу придумать два решения вашей проблемы:
1) Используйте наблюдателя на name
:
Создайте функцию наблюдателя для name
и установите для нее this.alias
то же значение, что и name
, когда alias
пусто, или если оно совпадает с предыдущим значением имени.
<script>
export default {
data: () => ({
name: "",
alias: ""
}),
watch: {
name(newVal, oldVal) {
if (!this.alias || this.alias === oldVal) {
this.alias = newVal;
}
}
}
}
</script>
2) Используйте явные привязки :value
и @change
/ @keyup
при вводе имени:
v-model
- это удобный метод, который устанавливает оба этих параметра для вас, но в вашем случае вы хотите добавить еще несколько логин c в обработчик изменений, который просто устанавливает значение свойства состояния.
<template>
<div>
<input
type="text"
:value="name"
@keyup="onNameInput"
/>
<input type="text" v-model="alias">
</div>
</template>
<script>
export default {
data: () => ({
name: "",
alias: ""
}),
methods: {
// Check and set both values on name input events
onNameInput(e) {
if (!this.alias || this.alias === this.name) {
this.alias = e.target.value;
}
this.name = e.target.value;
}
}
}
</script>