Возникли две ошибки при попытке просмотреть объект в Vue

В настоящее время я создаю приложение на Vue 3 для отслеживания результатов ставок на спорт. У меня есть этот компонент, который является частью формы для ввода отдельной части купона ставки. Каждый дочерний компонент обновляет объект details в родительском. Значения обновляются без проблем. Но я пытаюсь следить за изменениями в объекте details, чтобы проверить информацию и обновить соответствующие флаги. Я сталкиваюсь со следующими двумя ошибками, обе в родительском компоненте:

Неверный обработчик просмотра, указанный ключом «undef».

Неверный параметр просмотра: «глубокий» true

РодительскийКомпонент.vue

<template>
  <SelectComponent
    name = "sports"
    id = "sport-select"
    :options = "marketOptions"
    :class = "isValidMarket ? 'valid' : 'invalid'"
    @update = "updateValue(details, 'sport', $event)"
  />
  <InputText
    type = "text"
    for = "subject"
    placeholder = "Team / Player / Game"
    :class = "isValidSubject ? 'valid' : 'invalid'"
    @update = "updateValue(details, 'subject', $event)"
  />
</template>
<script>
export default {
  name: 'ParentComponent',
  data() {
    return {
      details: {
        sport: {
          type: String,
          default: '',
        },
        subject: {
          type: String,
          default: '',
        },
      },
      isValidMarket: false,
      isValidSubject: false,
    }
  },
watch: {
    details: {
      validate(val) {
        console.info(val)
        console.info('something changed!')
      },
    },
    deep: true,
  },

Я также попробовал другой подход к свойству watch.

watch: {
    'details.sport': {
      validate: function (val) {
        if (val === '' || val === '--Select a Market--') {
          this.isValidMarket = false
        } else {
          this.isValidMarket = true
        }
      },
    },
}

Оба из них приводят к ошибкам, упомянутым ранее, и теперь проверка происходит неправильно.

Я также структурировал объект details следующим образом:

details: {
  sport: '',
  subject: ''
},
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция-наблюдатель должна вызываться handler, а свойство deep должно быть размещено сразу после функции-обработчика.

https://vuejs.org/guide/essentials/watchers#deep-watchers (обязательно переключитесь с Composition на Options API в левом верхнем углу)

watch: {
  details: {
    handler(val) {
      console.info(val)
      console.info('something changed!')
    },
    deep: true
  }
},

Спасибо! Я увидел handler в другом посте SO и сначала сделал это. Я изменил это, потому что не думал, что это ДОЛЖНО так называться. Но я также изменил кучу другого кода и не думал об этом, пытаясь выяснить, что пошло не так.

Andrew 11.04.2024 19:48

Другие вопросы по теме