I want to use an Observable<string[]> for gradually displaying content on component of my Angular apps.
- On TypeScript side I declared this:
export class ResultComponent implements OnInit{
message: string = 'my message for user';
spreadedMessage$: Observable<string> = from(this.message);
progressiveMessage:string = "";
ngOnInit() {
let interval = 1
this.obsMessage$
.pipe(
tap((letter) => {
delay(35*interval),
this.progressiveMessage += letter;
interval++
})
)
.subscribe();
}
}
- Binding progressiveMessage to the template
<div> {{ progressiveMessage }} </div>
My full code listing can be found here
I tried a second approach that works well as below but I would like to understand what is wrong with my use of Observable to progress.
My alternative solution:
Changed
spreadedMessage$: Observable<string> = from(this.message);
tospreadedMessage: string[] = [...this.message];
Declared this on
OnInit()
method:
for (let i: number = 0; i < this.spreadedMessage.length; i++) {
setTimeout(() => (this.spaceMessager += this.spreadedMessage[i]), 35 * i);
}
Any ideas?