0
我有以下在我的部件代碼和chats.push()函數的方法中ionViewDidLoad生成錯誤:訪問組件內的可變訂閱()內ionViewDidLoad()
@Component({
selector: 'page-messages',
templateUrl: 'messages.html'
})
export class MessagesPage {
currentUser: User;
chats: Chat[];
constructor(public navCtrl: NavController, public navParams: NavParams, private _auth: AuthService, private _db: DatabaseService, private _user: UserService) {
console.log('constructor MessagesPage');
// Get currently authenticated user
this.currentUser = this._auth.currentUser;
}
ionViewDidLoad() {
//console.log(this.chats.length);
console.log('ionViewDidLoad MessagesPage');
// Load chats
this._user.getChatsAsObservableList(this.currentUser.uid).subscribe(tmpChats => {
tmpChats.forEach(tmpChat => {
console.log(tmpChat);
// Retrieve chat id
let chatId = tmpChat.$key;
console.log('Retrieving a chat with id ', chatId);
// Instantiate a Chat object
let chat = new Chat(chatId, tmpChat);
// Retieve its members
let chatMembers = this._db.getChatMembersAsObservableList(chatId);
// For each member retieve the user info and add it the memebers of the Chat object
chatMembers.subscribe(members => {
members.forEach(member => {
this.addMemberToChat(chatId, member.$key);
});
});
// finally add the chat to the chat list
this.chats.push(chat); // Generates an ERROR : Cannot read property 'push' of undefined
console.log('Chat:', chat);
});
});
}
// Methods
addMemberToChat(chat: Chat, uid: string) {
if (uid) {
let userAsObservableObj = this._user.getUserAsObservableObj(uid);
let user = new User(uid, userAsObservableObj);
chat.members.push(user);
} else {
console.log('Could not add member to Chat object because uid was empty.');
}
}
}
我想這是一個「這個」問題,我看到很多關於這個的帖子,但我無法用胖箭頭解決它。我想這是因爲我有幾個級別的承諾......
我怎麼能解決這個問題?
我沒有看到一個'this'問題。我想知道爲什麼你將'chatId'傳遞給'addMemberToChat(...)',然後將其作爲'chat:Chat'接收,並將它的'members'作爲'push(user)'來訪問。我假設'chatId'是一個數字或字符串,而不是一個複雜的對象。 –
嘗試初始化聊天變量,如'聊天:聊天[] = [];' –
你是對的,那是一個錯誤,代碼應該是this.addMemberToChat(聊天,會員。$ key)。你有什麼想法,爲什麼我還有這個未定義的問題呢? –