我一直在尝试了解“ 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。不胜感激。