Я новичок в угловых.
я хочу извлечь данные из наблюдаемого. Я делаю это :
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}
....



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Скобки из вашего журнала указывают на то, что вы получаете не объект, а массив объектов. Просто получите первый элемент массива, и тогда вы сможете получить доступ ко всем атрибутам вашего объекта.
Кроме того, вы не должны использовать 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);
);
}
Это выглядит правильно, вам просто нужно прочитать первый элемент массива и получить доступ к нужному свойству.
Ваш сервис:
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» не существует для типа {ключ: строка}
@AlanENTEM похоже, что у вас определены неправильные типы. Пожалуйста, проверьте мой отредактированный ответ для подсказки.
Не могли бы вы также опубликовать код для вашего метода getSingleDemandenomis? Так что я могу помочь вам с правильными типами.
Я добавил тип возвращаемого значения для вашего сервиса и исправил проблему с неглубоким именем. Попробуй это. Пожалуйста, подумайте о том, чтобы узнать больше о TypeScript, чтобы лучше познакомиться с типами.
у меня есть тип {ключ: строка;}[] не может быть назначен типу {ключ: строка, датазапрос: строка}, я не понимаю эту проблему, поэтому я могу правильно использовать свою функцию, но она отправляет мне эту ошибку
Хорошо, чтобы помочь решить вашу проблему, было бы лучше, если бы вы могли предоставить минимально воспроизводимое состояние приложения в онлайн-редакторе, таком как stackblitz.com.
Я бы придерживался наблюдаемого:
validnomi(key : string) {
this.demandesnomiftodisplay =
this.demandenomisService.getSingleDemandenomis(key).pipe(
pluck('datademande')
).subscribe(val => console.info(val));
Вот StackBlitz для иллюстрации.
Так и должно быть, ИМХО. Я удалил свой ответ, так как pluck кажется, лучше подходит для этого случая. Получите мой голос
у меня есть эта ошибка: подписка на свойство не существует в операторной функции типа