Vue, свойство фильтра для наблюдаемого

#javascript #vue.js #vuejs2

#javascript #vue.js #vuejs2

Вопрос:

Я довольно новичок в Vue, сейчас я делаю следующее.

Я получаю реквизит Item в своем компоненте, я распространяю этот реквизит Item на объект данных Формы, который определен в моем компоненте (чтобы иметь реактивность)

 data() {
  return {
    form: {}
  }
mounted () {
  this.form = {
    ...this.item,
    translations: { ...this.item.translations }
  }
},
  

Теперь данные моей локальной формы содержат информацию, включая реактивные переводы, верно?

Следующее, что я пытаюсь сделать, это отфильтровать эти данные, но тогда это меня подводит. Если я console.log(this.form). Это наблюдаемый объект (см. скриншот)

введите описание изображения здесь

Есть ли способ отфильтровать, уменьшить, сопоставить это «Наблюдаемое»? Правильно ли я делаю «реактивность»?

Комментарии:

1. Можете ли вы показать код, который фильтрует данные? Как это «подводит» вас? Сообщение об ошибке? Или неожиданное поведение?

Ответ №1:

Попробуйте clone /deepClone, прежде чем назначать элемент this.form .

Ответ №2:

Вы можете получить доступ props из data() напрямую.

 data() {
  return {
    form: {
      ...this.item,
      translations: { ...this.item.translations }
    }
  }
},
computed: {
   getForm() {
     // use filter/map method here, e.g.
     // return this.form.filter((item) => { ... })
   }
}  

Комментарии:

1. Спасибо за подсказку, это немного более чистый код, однако проблема, из-за которой я не могу подгонять, сокращать или работать с этим observable, сохраняется, есть идеи?

2. Вы можете фильтровать / уменьшать / и т.д. в computed: свойстве.. оно также реактивно.

3. @SajibKhan form не является Array , поэтому у него нет filter метода.

4. да, это был примерный пример, это означает, что вы можете выполнять любые операции с this.form внутри метода computed: -> getForm().