Не обновляется свойство в компоненте Vue

Есть родительский компонент, в котором строится таблица при помощи данных полученных из БД при помощи использования такого хука:

created: function () {this.getPacts();},

код метода getPacts такой:

getPacts: function () {
  axios
   .get('/pact/get-pacts', {timeout: 2000})
   .then(response => {
     this.loadData = response.data.data
    })
    .catch(error => {
     console.log(JSON.stringify(error))
    })
  },

свойство this.loadData прописано так:

data: function () {
  return {
    loadData: [],
    operators: [],
    isActiveDeletePactModal: false,
    isActiveAddPactModal: false,
    isActiveUpdatePactModal: false,
    indexDeletedPact: 0,
    indexUpdatedPact: 0,
   }
 },

Есть дочерний компонент - модальное окно. Используется для записи данных в БД. Мне нужно, чтобы после закрытия модального окна, отправлялся запрос в БД, для обновления таблицы в родительском элементе. Я сделал генерацию события при закрытии модального окна и в родительском компоненте прописал отлов этого события, но он не отрабатывает.

Вот так прописано в дочернем компонете:

methods: {
  closeModal: function () {
     this.$emit('reload');
     this.$parent.isActiveAddPactModal = false;
     this.clearAllData();
    },
  }

Вот так прописано в родительском компоненте:

<h2 class="main-color active-element" @reload="getPacts">Перелік договорів</h2>

В итоге: метод getPacts даже не вызывается.

В чем может быть проблема?


Ответы (2 шт):

Автор решения: Николай Парахневич

Вероятно вы неправильно используете метод closeModal в дочернем компоненте. Посмотрите пример реализации подобной задачи в подготовленном для вас примере: Пример пользовательского события во Vue.

При подготовке ответа, использовалась информация из официальной документации Vue - Пользовательские события Vue, Компоненты Vue.

→ Ссылка
Автор решения: Дмытрык

Вы отслеживаете событие reload, на нативном тэге h2. У этого тэга нет такого события. Событие которое эммитит дочерние компонент необходимо отслеживать непосредственно на нем. Если же Вы назвали компонент именем, которое совпадает с именем нативного тэга, то нужно поменять имя

→ Ссылка