2017-02-14 26 views
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.'); 
    } 
    } 

} 

我想這是一個「這個」問題,我看到很多關於這個的帖子,但我無法用胖箭頭解決它。我想這是因爲我有幾個級別的承諾......

我怎麼能解決這個問題?

+1

我沒有看到一個'this'問題。我想知道爲什麼你將'chatId'傳遞給'addMemberToChat(...)',然後將其作爲'chat:Chat'接收,並將它的'members'作爲'push(user)'來訪問。我假設'chatId'是一個數字或字符串,而不是一個複雜的對象。 –

+1

嘗試初始化聊天變量,如'聊天:聊天[] = [];' –

+0

你是對的,那是一個錯誤,代碼應該是this.addMemberToChat(聊天,會員。$ key)。你有什麼想法,爲什麼我還有這個未定義的問題呢? –

回答

0

初始化聊天解決問題:

chats: Chat[] = [];