Если я понимаю вашу проблему:
- представление обновляется при каждом изменении формы, поскольку вы связали
card-body
с повторением div
непосредственно с процессом фильтрации, поэтому «Найти!» кнопка не используется
- Вы не считаете выбор города
Чтобы исправить это, свяжите модель с селектором города и объявите отдельные переменные для данных JSON и для выбранных данных:
<select name="" class="city" id="" v-model="city">
и
data: {
search: "",
sourceJobs: [],
selectedJobs: [],
city: ""
}
Затем поместите данные JSON в sourceJobs
при создании:
fetch("job.json").then(function (res) {
this.sourceJobs = res.json();
});
Примечание: эта архитектура не будет жизнеспособна для больших данных JSON, возможно, вам следует подумать о фильтрации данных через вызов вашего внутреннего API ... но это не текущий вопрос.
Теперь, когда ваши данные формы привязаны к data.search
и data.city
, а ваш пул заданий хранится в data.sourceJobs
, вы хотите иметь метод (не более computed
) для фильтрации data.sourceJobs
и скопируйте полученное подмножество в data.selectedJobs
:
methods: {
selectJobs: function () {
this.selectedJobs = this.sourceJobs
.filter((job) => {
return job.cityName === this.city && job.positionName.match(this.search);
})
}
}
Наконец, вызовите этот метод, когда "Find!" нажата кнопка:
<button v-on:click="selectJobs">Find!</button>
Если вы измените свою архитектуру, чтобы выполнить вызов API для фильтрации, вам просто нужно удалить эту часть created
и выполнить вызов API из метода selectJobs
.
Боковое, несвязанное примечание: найти / найти / найти (успешный результат поиска) и найти / основать / основать (создать, построить, установить базу для чего-либо - город, компания ...).