2017-08-16 7 views
0

ここでは、私は私の変数のスレッドで起動する方法です:観察可能な型の変数にThread型の変数を追加します。<{[キー:文字列]:スレッド}>

threads: Observable<{ [key: string]: Thread }>; 

をそして、これは私が私の変数を初期化する方法でありますスレッドは:

this.threads = messageService.messages 
    .map((messages: Message[]) => { 
    const threads: { [key: string]: Thread } = {}; 
    messages.map((message: Message) => { 
     threads[message.thread.id] = threads[message.thread.id] || 
     message.thread; 

     const messagesThread: Thread = threads[message.thread.id]; 
     if (!messagesThread.lastMessage || 
     messagesThread.lastMessage.date < message.date) { 
     messagesThread.lastMessage = message; 
     } 
    }); 
    return threads; 
    }); 

私は、変数スレッドに変数newThreadを追加したい:

const newThread: Thread = new Thread(objMessage.id, objmessage.participants); 

私はこれを試してみました:

threads = Observable.of([newThread]); 

またはこの:

this.threads.subscribe((thread: Thread) => { 
    threads.next(newThread); 
}); 

しかし、それはうまくいきません。しかし、タイプは正しいものではありません。

///////////////////////////////////////////////////////////////////////////// //////////////////////////////

EDIT:

////////// /////////////////////////////////////////////////////////////////私は、この初期設定を変更

threads: BehaviorSubject<{[key: string]: Thread }> = BehaviorSubject.create(); 

私はBehaviorSubjectであることを私のスレッド変数を変更////////////////

this.messageService.messages.map((messages: Message[]) => { 
    const threads: { [key: string]: Thread } = {}; 
    messages.map((message: Message) => { 
    threads[message.thread.id] = threads[message.thread.id] || 
     message.thread; 

    const messagesThread: Thread = threads[message.thread.id]; 
    if (!messagesThread.lastMessage || 
     messagesThread.lastMessage.date < message.date) { 
     messagesThread.lastMessage = message; 
    } 
    }); 
    return threads; 
}).subscribe(threads => { 
    this.threads.next(threads); 
}); 

そして私は、この置く:

addThread(newThread: Thread): void { 
    this.threadService.newThreads.push(newThread); 
    this.threadService.newThreadsId.push(newThread.id); 

this.threadService.orderedThreads.next(this.threadService.newThreads); 

let threads = this.threadService.threads.value; 
this.threadService.threads.next(threads); 
} 

をそして、私はこのエラーがあります:

Cannot set property 'flo' of undefined ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot set property 'tRev' of undefined 

'FLO' それは私のスレッドのL'IDですが:

this.addNewMessageNewThread({ 
    "id": "flo", 
    "author": "Flo Peron", 
    "body": "COUUUUCOU", 
    "title": "Groupe 158" 
}); 
+0

[スレッド]タイプです。 Observable.of()は、観測可能にすることができるシーケンスを期待しています – Mitta

+0

@Mitta 私はそれを変更しました:threads = Observable.of([newThread]); しかし、どちらも動作しません。 'スレッド'に 'newThread'を追加することは可能ですか? – Floriane

答えて

0

それをあなたは被験者であり観察者ではないように思えます。具体的には、現在の値を変更したいので、おそらく動作の件名が必要です。

threads: BehaviorSubject<{[key: string]: Thread}>; 

messageService.messages.map(...).subscribe(threads => { 
    this.threads.next(threads); 
}); 

addThread(key: string, thread: Thread) { 
    let threads = this.threads.value; 
    threads[key] = thread; 
    this.threads.next(threads); 
} 
+0

答えてくれてありがとうございますが、これは私の間違いです。 'this.threads.next(threads); エラー:'未定義の 'next'プロパティを読み取ることができません。ゾーン:;タスク:Promise.then;値:TypeError:未定義の 'next'プロパティを読み取れません。 なぜ私は理解できません.. – Floriane

+0

私の投稿を公開しました。私は、BehaviorSubject型の変数をどうやって行うのか見ていないのですか? .. – Floriane

関連する問題