#vue.js
#vue.js
Вопрос:
У меня есть форма vue, и я пытаюсь собрать данные в объект, но когда один элемент объекта пуст, я хочу, чтобы это поле было уничтожено.
это мое поле ввода:
<input v-model="fields.title" >
мои данные:
data() {
return {
fields: {},
}
},
По сути, прямо сейчас происходит то, что происходит, когда я что-то пишу в своем поле, оно создается title: 'data'
, и если я удаляю текст внутри, то этот элемент все еще существует там, поэтому я остаюсь title: ''
, но я хочу, чтобы он был удален, если он пустой.
Я могу воссоздать это следующим образом:
computed: {
destroyFieldWhenEmpty() {
if (this.fields.title === ''){
this.$delete(this.fields, 'title')
}
Но теперь, если у меня много полей, я должен переписать этот оператор if для каждого ввода.
Таким образом, как я мог бы сделать это лучше?
Комментарии:
1. зачем вы это делаете? каков конкретный вариант использования?
2.
destroyFieldWhenEmpty
это неправильное использование вычисляемых реквизитов, поскольку он, по-видимому, используется только для удаленияfields.title
, но вычисляемые реквизиты должны возвращать что-то (для использования в другом месте компонента) и не должны иметь побочных эффектов.3. @BoussadjraBrahim Итак, в принципе, я хочу изменить класс одного из моих div, когда данные вставляются в любое из полей, для этого мне нужно проверить, является ли объект fields пустым, и изменить класс на основе этого.
4. не могли бы вы показать, как вы это делаете?
Ответ №1:
— Используйте функцию Lodash isEmpty()
_.isEmpty({}) // true
_.isEmpty({title: 'title'}) // false
— Используйте Object.keys().length
const obj = {...}
Если obj
пусто, Object.keys(obj).length
равно 0.
Ответ №2:
Пока что я понял вашу проблему: вы пытаетесь удалить объект из массива. если это так, вы можете фильтровать данные с помощью своей собственной бизнес-логики следующим образом
const restFields = this.fields.filter(field => field.title.length > 0)
Комментарии:
1.
fields
это объект, а не массив.2. @tony19 ты, ты пытался добавить
v-if="fields.title"
, чтобы скрыть какой-либо компонент vue. или, если вы хотите удалить ключ из объекта, попробуйтеdelete this.fields.title
. На самом деле слишком много способов сделать это, но неясно, какова ваша логика.