错误类型“ AngularFireObject <{}>上不存在获取属性

时间:2018-07-22 11:28:02

标签: angular typescript firebase angularfire2

我一直在尝试了解“ take()”运算符和“ subscribe()”如何工作。我一直在观看教程,并尝试将其应用到我的项目中,但是遇到了两个我无法弄清楚如何解决的错误:

属性“ subscribe”在“ AngularFireObject <{}>”类型上不存在
类型“ AngularFireObject <{}>”上的属性“ take”不存在

这是代码:

data.ts:

        import { Injectable } from '@angular/core';
        import { AngularFireDatabase } from "angularfire2/database";

        //Data Provider
        //Class for most of the Firebase observables.
        @Injectable()
        export class DataProvider {

            constructor(public afDb: AngularFireDatabase) {
                console.log('===Data Provider');
            }

            // Get requests given the userId.
            getRequests(userId) {
                return this.afDb.object('/requests/' + userId);
            }

            // Get logged in user data
            getCurrentUser() {
                return this.afDb.object('/accounts/' + firebase.auth().currentUser.uid);
            }
}

friends.ts:

import { Component } from "@angular/core";
import { DataProvider } from "../../providers/data/data";
import * as firebase from 'firebase';


// FriendsPage
// Page where the user can search and view friends.
@Component({
    selector: 'page-friends',
    templateUrl: 'friends.html',
})
export class FriendsPage {


    private friends: any;
    private friendRequests: any;
    private searchFriend: any;

    constructor(public navCtrl: NavController,
        public dataProvider: DataProvider,
    ) {
    }

    ionViewDidLoad() {
        this.searchFriend = '';

        this.dataProvider.getRequests(firebase.auth().currentUser.uid).subscribe((requests) => {
            this.friendRequests = requests.friendRequestSent;
        });

        this.dataProvider.getCurrentUser().subscribe((account) => {
            if (account.friends) {
                for (let i = 0; i < account.friends.length; i++) {
                    this.dataProvider.getUser(account.friends[i]).subscribe((friend) => {
                        this.addOrUpdateFriend(friend);
                    });
                }
            } else {
                this.friends = [];
            }
        });
    }

    addOrUpdateFriend(friend) {
        if (!this.friends) {
            this.friends = [friend];
        } else {
            let index = -1;
            for (let i = 0; i < this.friends.length; i++) {
                if (this.friends[i].$key == friend.$key) {
                    index = i;
                }
            }
            if (index > -1) {
                this.friends[index] = friend;
            } else {
                this.friends.push(friend);
            }
        }
    }
}

firebase.ts:

import { Injectable } from "@angular/core";
import { AngularFireDatabase } from "angularfire2/database";
import { LoaderProvider } from "../../providers/loader/loader";
import { AlertProvider } from "../../providers/alert/alert";
import { DataProvider } from "../../providers/data/data";
import * as firebase from "firebase";
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/take';

// Firebase Provider
// Class for most of the Firebase updates.
@Injectable()
export class FirebaseProvider {

    constructor(public afDb: AngularFireDatabase,
        public loaderProvider: LoaderProvider,
        public alertProvider: AlertProvider,
        public dataProvider: DataProvider,
    ) {
        console.log('=== Firebase Provider');
    }


    // Send friend reqest to userId
    sendFriendRequest(userId) {

        let loggedInUserId = firebase.auth().currentUser.uid;
        this.loaderProvider.showSpinner();

        let requestsSent;
        // Uses take(1) so that subscription will only trigger once.
        this.dataProvider.getRequests(loggedInUserId).take(1).subscribe((requests) => {
            requestsSent = requests.requestsSent;
            if (!requestsSent) {
                requestsSent = [userId];
            } else {
                if (requestsSent.indexOf(userId) == -1) {
                    requestsSent.push(userId);
                }
            }
            // Add requestsSent information.
            this.afDb.object('/requests/' + loggedInUserId).update({
                requestsSent: requestsSent
            }).then((success) => {
                let friendRequests;
                this.dataProvider.getRequests(userId).take(1).subscribe((requests) => {
                    friendRequests = requests.friendRequests;
                    if (!friendRequests) {
                        friendRequests = [loggedInUserId];
                    } else {
                        if (friendRequests.indexOf(userId) == -1) {
                            friendRequests.push(loggedInUserId);
                        }
                    }
                    // Add friendRequest information.
                    this.afDb.object('/requests/' + userId).update({
                        friendRequests: friendRequests
                    }).then((success) => {

                    }).catch((error) => {

                    });
                });
            }).catch((error) => {

            });
        });
    }
}

我正在使用angularfire2@5.0.0-rc.4和firebase@4.8.0。不胜感激。

0 个答案:

没有答案