NGRX Entity Effects Firestore

Я следую этому руководству https://www.concretepage.com/angular-2/ngrx/ngrx-entity-example. Теперь я использую Firestore в качестве серверной части. Я могу получить "LOAD_ALL_ARTICLES" из Firestore. Но мой код ломается, когда я пытаюсь прослушать действие «ДОБАВИТЬ». Любые идеи, пожалуйста ?!

import { Injectable } from '@angular/core';
import { Action } from '@ngrx/store';
import { Actions, Effect } from '@ngrx/effects';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/operator/mergeMap';
import * as fromActions from '../actions/article.actions';
import * as fromReducer from '../reducers/article.reducer';



//import { ArticleService } from '../services/article.service';
import { Article } from '../models/article';

import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from 'angularfire2/firestore';

@Injectable()
export class ArticleEffects {

  constructor(
    private actions$: Actions,
    private afs: AngularFirestore
  ) {}

  @Effect()
  loadAllArticles$: Observable<Action> = this.actions$
    .ofType(fromActions.ArticleActionTypes.LOAD_ALL_ARTICLES)
    .switchMap(() =>
      const ref = this.afs.collection<Article>('articles');
      return ref.snapshotChanges().map(arr => {
      return arr.map(action => {
        const data = action.payload.doc.data() as Article;
        const id = action.payload.doc.id;
        return { id, ...data };
      })
    })


  .map(data => new fromActions.LoadArticlesSuccess({ articles: data }));

//Listen for the 'ADD' action
        @Effect()
        addArticle$: Observable<Action> = this.actions$
        .ofType(fromActions.ArticleActionTypes.ADD_ARTICLE)
        .map((action: fromActions.AddArticle) => action.payload)
        .switchMap( payload => {
          const ref = this.afs.doc<Article>(`articles/${payload.article.id}`);
          return Observable.fromPromise(ref.set(payload.article));
        })


  }

}

person Orbicalaz    schedule 28.10.2018    source источник
comment
У вас есть ошибки?   -  person ibenjelloun    schedule 29.10.2018
comment
Привет, хорошо, я работал над этим кодом, используя сервис и эффекты. В настоящее время я не получаю никаких ошибок. Я могу получить данные, но не могу создать новую статью   -  person Orbicalaz    schedule 17.11.2018
comment
Я разместил код на StackBlitz Я разместил код на StackBlitz stackblitz.com/edit/ angular-entity-store-bxd3te   -  person Orbicalaz    schedule 17.11.2018


Ответы (1)


Я считаю, что вам нужно сначала переключить карту:

@Effect()
    addArticle$: Observable<Action> = this.actions$
    .ofType(fromActions.ArticleActionTypes.ADD_ARTICLE)
    .switchMap((action: fromActions.AddArticle) => of(action.payload))
    .map( payload => {
      const ref = this.afs.doc<Article>(`articles/${payload.article.id}`);
      return Observable.fromPromise(ref.set(payload.article));
    })
person Clouse24    schedule 01.02.2019