Как изменить наблюдаемые значения с помощью операторов rxjs? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть угловое приложение, и в одном из компонентов я получаю уведомления пользователя (электронные письма) через службу. служба возвращает массив объектов, и в каждом объекте есть информация об электронной почте, такая как тема, идентификатор пользователя отправителя и т. д. структура массива объекта электронной почты выглядит следующим образом:

[{
  UserId:"...",

  Notification:{
     Subject:null,
     Body:"<div>...</div>",
     .
     .
     .
  },
  .
  .
  .
},
.
.
.]

некоторые электронные письма не имеют темы, и значение Subject свойства составляет null в объекте. Я хочу установить значение для писем с Subject:null.

this.notifService.getAllNotificationsForCurrentUser(userId)
.pipe(
    map(emails => {
       emails.map(email=>{
         if(email.Notification.Subject === null){
            email.Notification.Subject = "(No Subject)";
         }
       })
    }
)
.subscribe(
    result=> this.messages = result
);

Я использовал оператор map, и он не работает. и есть некоторые ошибки:

Cannot read property 'Notification' of undefined

как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2019

Используйте оператор rxjs map с Array.prototype.map () .

  1. Первый map позволяет вам изменять массив писем, как если бы он стекал по потоку. Он сопоставляет элементы потока, каждый элемент представляет собой массив писем .

  2. Второй map изменяет массив писем, чтобы установить пустые поля subject на no subject. Он сопоставляется с массивом электронных писем, каждый элемент является электронным письмом .

import { map } from 'rxjs/operators';

this.notifService.getAllNotificationsForCurrentUser(userId).pipe(
    map(emails => {
        return emails.map(email => ({
            ...email,
            Notification: {
                ...Notification,
                Subject: email.subject ? email.subject : 'no subject'
            }
        }));
    })
).subscribe(
    result=> this.messages = result
);
1 голос
/ 10 апреля 2019

Если это только для целей отображения, вы должны просто сделать

{{email.Notification.Subject || '(No Subject)'}}

Если нет, перейдите для отображения массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...