Если одно и то же значение выводится на консоль перед вызовом axios, почему на сервер отправляется другое значение?

У меня есть поле формы со следующим общим автозаполнением:

      <generic-autocomplete
        v-model='c.heuristicId'
        v-on:change='heuristicSelected(i, $event)'
        label='Fuente de datos'
        :apiFunction='heuristicsFetchFunction'
        :disabled='disabled'/>

При сохранении формы и отправке ее с пустым полем heuristicIdотправляется как null, что и требуется.

Однако при выборе значения из универсального автозаполнения и последующем его удалении heuristicIdgets отправляется с идентификатором ранее выбранного значения.

Внутри функции, которая вызывает аксиомы, я регистрирую console.log("heuristicId to be sent: " + campaign.heuristicId); и undefined, которые регистрируются в обоих сценариях.

РЕДАКТИРОВАТЬ: После небольшого запроса я считаю, что ошибка может быть в одном из вычисленных свойств <generic-autocomplete/>:

  isValid: function () {
    // this checks that the name in display equals the object selected in
    // memory so no invalid labels are displayed while a valid object is 'selected'
    let vc = this
    let result = false
    if (vc.object) {
      result = vc.objectName === vc.object.name
      console.log('generic-autocomplete#isValid', result)
    }
    return result
  } 

Пустой vc.objectвернет falseresult, и я не смог удовлетворительно справиться с этим.


person Esteban Vargas    schedule 04.04.2018    source источник
comment
Можете ли вы загрузить свой код куда-нибудь? И вы также можете удалить ненужный код из своего вопроса, чтобы люди могли лучше получить неправильную часть.   -  person Asqan    schedule 05.04.2018
comment
@Asqan, пожалуйста, проверьте новое редактирование. Спасибо   -  person Esteban Vargas    schedule 05.04.2018


Ответы (1)


После регистрации действительно сложного потока управления я, наконец, дошел до того, что знал, какие свойства мне нужно изменить. Однако оказывается, что во Vue 2 изменение встроенных свойств является анти-паттерном. Возможность изменения встроенных реквизитов устарела по сравнению с предыдущей версией Vue, чтобы соответствовать полностью реактивной парадигме библиотеки. Итак, что происходит, так это то, что если вы попытаетесь изменить встроенное свойство, при повторном рендеринге компонента этому свойству будет возвращено его значение по умолчанию (или предыдущее).

Это решается путем добавления вычисляемого свойства, являющегося копией свойства, которое вы хотите изменить.

//Somewhere else in the code the property is defined
property: null

//Add the computed property
data: function () {
    return {
      mutableProperty: this.property,
    }
}
person Esteban Vargas    schedule 16.04.2018