I am following this tutorial. works fine receiving message with App-component but does not work for another components . I am using MessageService as a entire application scope in @ngModule for injection . Appcomponent receives message, but other components can send msgs does not receive message.
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class MessageService {
private subject = new Subject<any>();
sendMessage(message: string) {
this.subject.next({ text: message });
console.log('called:' + message);
}
clearMessage() {
this.subject.next();
}
getMessage(): Observable<any> {
console.log('message geting');
return this.subject.asObservable();
}
}
2)LoginComponent //for sending message
import { Observable } from 'rxjs/Observable';
import { MessageService } from '../services/message.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
constructor(
private messageservice ?:MessageService
) {
sendMessage(): void {
console.log("send");
this.messageservice.sendMessage('Message from waqas to login');
}
clearMessage(): void {
// clear message
this.messageservice.clearMessage();
}
3)TestComponent //testing for receiving message
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';
import { MessageService } from '../services/index';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css'],
})
export class TestComponent implements OnDestroy {
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
// title = 'app';
message: any;
subscription: Subscription;
constructor(private messageService: MessageService) {
// subscribe to home component messages
this.subscription = this.messageService.getMessage().subscribe(message => { this.message = message;console.log(message) });
// console.log('receving'+this.message);
}
}
AppModule File
providers: [MessageService,UserService,AuthenticationService,UploadFileService,CategoryService,ProductService,AuthGuard,AdminAuthGuard,
{provide: ErrorHandler, useClass: AppErrorHandler},
{
provide: HTTP_INTERCEPTORS,
useClass: TokenInterceptor,
multi: true
}
],
bootstrap: [AppComponent],
})
I do not know how to change bootstrap provider for TestComponent or LoginComponent to use MessageService . I googled and other questions over stackoverflow too but could not solve my problem .
Thanks in advance