Вы должны знать, что текстовое поле уже имеет maxlength
, установленное на 1000, поэтому метка Exceeded N characters limit
невозможна (если вы не проверили менее 1000).В настоящее время на ярлыке всегда будет отображаться N reminaing characters
.
Вариант 1: Отображать подсчет подсчета в строке
Вместо сохранения количества знаков (излишне занимая дополнительную память), вы можете отобразить вычисление в строкес интерполяцией строк:
<template>
<div>
<textarea v-model="item.portfolioDescription" maxlength="1000"></textarea>
<span>{{ 1000 - item.portfolioDescription.length }} remaining characters</span>
</div>
</template>
демо 1
Вариант 2: Отображать счетчик из переменной элемента
Если вы предпочитаете сохранять количество символов (например,(для некоторой внутренней обработки), вы можете добавить новое свойство к данным элемента:
<script>
const MAXLEN = 1000
export default {
methods: {
createPortfolioItem() {
this.portfolioItems.push({
remainChars: MAXLEN, // <--
})
},
}
}
</script>
Затем обновите item.remainChars
после textarea
input
-событие и отображение item.remainChars
inline.
<template>
<div>
<textarea v-model="item.portfolioDescription" maxlength="1000"
@input="item.remainChars = 1000 - item.portfolioDescription.length">
</textarea>
<span>{{ item.remainChars }} remaining characters</span>
</div>
</template>
demo 2
Опция 3: Показать вычисленный текст
Вы можете вычислить меток с количеством символов в отдельном массиве, который соответствует portfolioItems
:
<script>
const MAXLEN = 1000
export default {
computed: {
remainingCharsText() {
return this.portfolioItems.map(item => `${MAXLEN - item.portfolioDescription.length} remaining characters`)
},
}
}
</script>
Затем обновите ваш шаблон, чтобы он ссылался на этот вычисленный массив: index
:
<template>
<div>
<textarea v-model="item.portfolioDescription" maxlength="1000">
</textarea>
<span>{{ remainingCharsText[index] }}</span>
</div>
</template>
демо 3