Произошли ли последние изменения в RXJS? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий код в Angular 6, который раньше работал нормально.

 getNavigation(db): any {
    return db.list('/pages', ref => {
        let query = ref.limitToLast(100).orderByChild('sortOrder');
        return query;
    }).snapshotChanges().map(changes => {
        return changes.map(change => ({key: change.payload.key, ...change.payload.val()}));
    });
}

Вдруг, с некоторым недавним обновлением библиотеки (rxjs ??) выдает ошибку?Какой синтаксис изменился, что вдруг сломало мой код?

ОШИБКА TypeError: db.list (...). SnapshotChanges (...). Map не является функцией NavigationComponent.push ../ src / app / navigation.component.ts.NavigationComponent.getNavigation

Или, что более важно, как это исправить?: - (

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Хорошо, наконец-то понял это.

Вот рабочий код для любого, кто сталкивается с подобной проблемой:

import { Component } from '@angular/core';
import { Observable}  from 'rxjs';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
import { map } from 'rxjs/operators';
import { LogoComponent } from './logo.component';

@Component({
    selector: 'app-navigation',
    templateUrl: './navigation.component.html'
})


export class NavigationComponent {
    items: Observable<any[]>;
    childItems: Observable<any[]>;

    constructor(db: AngularFireDatabase) {
        this.items = this.getNavigation(db);
        this.childItems = this.getNavigation(db);
    }

    getNavigation(db: AngularFireDatabase): any {
        return db.list('/pages', ref => {
            let query = ref.limitToLast(100).orderByChild('sortOrder');
            return query;
        }).snapshotChanges().pipe(
            map(pages => {
                return pages.map(p => ({ key: p.key, ...p.payload.val() }));
            })
        );
    }
}

Чтобы обойти ошибку машинописного текста, мне пришлось ввести параметр db getNavigation.

Затем мне пришлось удалить ненужную функцию подписки, которая была показана как в ответах на этот вопрос, так и в миграционных документах AngularFire.Хотя это может быть необходимо в некоторых случаях, но не в моем.

0 голосов
/ 06 июня 2018

Передайте оператор карты:

getNavigation(db): any {
    return db.list('/pages', ref => {
        let query = ref.limitToLast(100).orderByChild('sortOrder');
        return query;
    }).snapshotChanges().pipe(
map(changes => {
        return changes.map(change => ({key: change.payload.key, ...change.payload.val()}));
    }));
}

Также убедитесь, что вы правильно импортировали map:

import {map} from 'rxjs/operators';
...