Это, должно быть, задавали раньше, но я не смог найти такой вопрос, поэтому позвольте мне заранее извиниться, если он есть.
В моем компоненте Vue (написано с использованием vue -property- у меня есть свойство data, которое является объектом:
const emptyFilters = {
name: ''
};
export default class MyComponent extends Vue {
filtersFields = emptyFilters;
...
}
В какой-то момент я бы хотел почистить фильтры. На данный момент есть только один фильтр, поэтому я могу сделать это:
this.filtersFields.name = '';
, но чтобы эта работа работала с любым количеством фильтров, я хотел бы сделать что-то вроде этого:
this.filtersFields = emptyFilters;
Приведенный выше метод дает сбой, предположительно потому, что я установил свойство, которое можно наблюдать для нового объекта, поэтому подписка на модель продолжает наблюдать за старым объектом, а не за новым. Насколько я понимаю, Vue.set
- это то, что мне нужно использовать для установки целого this.filtersFields
на новый объект (emptyFilters
). Я попытался:
this.$set(this, 'filtersFields', emptyFilters);
, но это тоже не удается (ввод с v-model="filtersFields.name"
не очищается). Что я делаю неправильно? Как правильно использовать Vue.set
? Он используется только для добавления нового свойства, которое не было установлено ранее? Нужно ли использовать какой-то другой метод?
PS В качестве решения , основываясь на ответах ниже, я решил не воссоздавать объект из себя, а использовать "заводской" метод получения:
// instead of using a const emptyFilters we use a getter because otherwise
// emptyFilters becomes an observable and should be recreated each time anyway
const getEmptyFilters = (): examinationsFilters => ({
name: ''
});
...
// (initializing)
filtersFields: examinationsFilters = getEmptyFilters();
...
// (in method)
this.filtersFields = getEmptyFilters();