Angular 7 Извлечение данных из наблюдаемых

Я новичок в угловых.

я хочу извлечь данные из наблюдаемого. Я делаю это :

validnomi(key : string): void {
  this.demandesnomiftodisplay = 
    this.demandenomisService.getSingleDemandenomis(key).subscribe(val => 

    {const civ = val[0].civ; 
     const datedemande = val[0].datedemande; 
     const nom = val[0].nom; 
     const prenom = val[0].prenom; 

     }
  );
}

мой сервис.тс:

getSingleDemandenomis(key: string){
return this.database.list('/Demandes/DemandesBALnominatives', ref => ref.orderByKey().equalTo(key)).snapshotChanges().pipe(map(actions => {
  return actions.map(a => {
    const data = a.payload.val();
    const key = a.payload.key;
    return {key, ...data };
  });
}));
 }

Но у меня есть эта ошибка:

property prenom does not exist on type {key : string}
property nom does not exist on type {key : string}
property civdoes not exist on type {key : string}

....

Поведение ключевого слова "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) для оценки ваших знаний,...
1
0
3 100
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Скобки из вашего журнала указывают на то, что вы получаете не объект, а массив объектов. Просто получите первый элемент массива, и тогда вы сможете получить доступ ко всем атрибутам вашего объекта.

Кроме того, вы не должны использовать JSON.stringify(), так как он превращает ваш массив объектов в строку.

validnomi(key : string) {
    this.demandesnomiftodisplay = this.demandenomisService.getSingleDemandenomis(key).subscribe(val => 
        // This will get the key from your object
        console.info(val[0].key);
    );
}

у меня есть эта ошибка: подписка на свойство не существует в операторной функции типа

Alan ENTEM 21.03.2019 16:22

Это выглядит правильно, вам просто нужно прочитать первый элемент массива и получить доступ к нужному свойству.

Ваш сервис:

getSingleDemandenomis(key: string): Observable<{key: string; datedemande: string}[]> {
   return this.database.list('/Demandes/DemandesBALnominatives', ref => 
       ref.orderByKey().equalTo(key)).snapshotChanges().pipe(map(actions => {
          return actions.map(a => {
              const data = a.payload.val();
              const payloadKey = a.payload.key;
              return {key: payloadKey, ...data };
          });
   }));
 }

Компонент:

validnomi(key : string) {
    this.demandesnomiftodisplay = this.demandenomisService.getSingleDemandenomis(key)
    .subscribe((val: {datedemande: string}[]) => console.info(val[0].datedemande));
}

у меня есть эта ошибка: свойство «datedemande» не существует для типа {ключ: строка}

Alan ENTEM 21.03.2019 15:40

@AlanENTEM похоже, что у вас определены неправильные типы. Пожалуйста, проверьте мой отредактированный ответ для подсказки.

Borys Kupar 21.03.2019 15:48

Не могли бы вы также опубликовать код для вашего метода getSingleDemandenomis? Так что я могу помочь вам с правильными типами.

Borys Kupar 21.03.2019 16:01

Я добавил тип возвращаемого значения для вашего сервиса и исправил проблему с неглубоким именем. Попробуй это. Пожалуйста, подумайте о том, чтобы узнать больше о TypeScript, чтобы лучше познакомиться с типами.

Borys Kupar 21.03.2019 16:40

у меня есть тип {ключ: строка;}[] не может быть назначен типу {ключ: строка, датазапрос: строка}, я не понимаю эту проблему, поэтому я могу правильно использовать свою функцию, но она отправляет мне эту ошибку

Alan ENTEM 21.03.2019 16:57

Хорошо, чтобы помочь решить вашу проблему, было бы лучше, если бы вы могли предоставить минимально воспроизводимое состояние приложения в онлайн-редакторе, таком как stackblitz.com.

Borys Kupar 21.03.2019 17:07

Я бы придерживался наблюдаемого:

validnomi(key : string) {
  this.demandesnomiftodisplay = 
    this.demandenomisService.getSingleDemandenomis(key).pipe(
    pluck('datademande')
  ).subscribe(val => console.info(val));

Вот StackBlitz для иллюстрации.

Так и должно быть, ИМХО. Я удалил свой ответ, так как pluck кажется, лучше подходит для этого случая. Получите мой голос

Grégory Elhaimer 21.03.2019 15:49

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