0

我在 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 ??)它抛出一个错误?什么语法发生了变化,突然破坏了我的代码?

错误类型错误:db.list(...).snapshotChanges(...).map 不是 NavigationComponent.push../src/app/navigation.component.ts.NavigationComponent.getNavigation 中的函数

或者更重要的是,我该如何解决?:-(

4

2 回答 2

3

管道地图运算符:

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';
于 2018-06-06T04:17:54.063 回答
1

好的,终于想通了。

这是遇到类似问题的任何人的工作代码:

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 的迁移文档中显示的不必要的订阅功能。虽然在某些用例中这可能是必要的,但在我的情况下却不是。

于 2018-06-07T04:23:48.653 回答