2017-01-09 2 views
0

Я использую NgRx в своем приложении angular2. Тем не менее, я испытываю трудности с использованием метода find на моем Observable.метод поиска не работает на RxJs Наблюдаемый

Переводы для моего приложения поступают из внешнего приложения через отдых и хранятся в хранилище NGRX в качестве объекта значения ключа. Этот объект имеет ключевую переменную с кодом и переменную перевода.

Когда я пытаюсь реализовать метод find, чтобы найти правильный объект перевода, он не работает.

@Pipe({ 


name: 'translate', 
}) 
export class TranslatePipe implements PipeTransform, OnInit { 

    uiMessages$ = this.sb.uiMessages$; 

    constructor (private sb: AppSandbox) {} 

    transform(value: string, args: any[]): any { 
    return this.uiMessages$.find((uiMessage: UiMessage) => (uiMessage.key === value)).translation; 
    } 

Кто-нибудь знает, что я делаю неправильно?

Благодаря

ответ

0

Если предположить, что uiMessages$ является Observable, вы не можете просто использовать .find и ожидать, что объект, поскольку find является rxjs-оператор и rxjs-операторы всегда будут возвращать Observable.

Что вы можете сделать, это:

transform(value: string, args: any[]): any { 
    return this.uiMessages$ 
     .switchMap((uiMessages: UiMessage[]) => Observable.from(uiMessages)) 
     .find((uiMessage: UiMessage) => (uiMessage.key === value)) 
     .map((uiMessage: UiMessage) => uiMessage.translation); 
} 

, а затем использовать async -pipe дополнительно:

<div>{{'foo' | translate | async}}</div> 
+0

Я понимаю, однако я получаю свойство ошибки находка не существует на типе «Наблюдаемые ». Есть идеи? – Ronny176

+0

Да, это в основном то, что я объяснил в своем ответе: '.find' вернет return Observable, если вы хотите сопоставить это с простым объектом (или строкой), вам придется либо пройти через« async »pipe (который является самым безопасным способом btw.) или реализовать какое-то считывание syncronouse (что крайне уродливо), что было бы возможно только в том случае, если вы можете быть на 100% уверены, что 'uiMessages $' не содержит асинхронных потоков – olsn

+0

Как примечание, есть готовые к использованию решения для обработки переводов в угловом2, на всякий случай это то, что вы хотите выполнить: https://github.com/ocombe/ng2-translate – olsn

Смежные вопросы