admin管理员组文章数量:1236574
I cant seem to figure out what the issue is,
I have a service that has a behavior subject like so...
popupSource = new BehaviorSubject<any>('');
popup(ponent) {
this.popupSource.next(ponent);
}
then In my header ponent
popupClick() {
this._service.popup('example');
}
then in my header.html
<button (click)="popupClick()"></button>
then In my app ponent
ngOnInit() {
this._service.popupSource.subscribe((result) => {
console.log(result);
})
}
so whats happening is the click is firing the this._service.popup('example');
but its never hitting the subscription...
I've put breakpoints on each function and It succesfully reaches this.popupSource.next(ponent)
but then nothing?? Every Time I click the button I should be getting the console log.
Im not sure what Im doing wrong... Ive left out code for brevity sake so please let me know if you need more information
EDIT
Ive also tried doing
private popupSource = new BehaviorSubject<any>('');
getPopup = this.popupSource.asObservable();
popup(ponent) {
this.popupSource.next(ponent);
}
and the in my app ponent listend to the getPopup instead
ngOnInit() {
this._service.getPopup.subscribe((result) => {
console.log(result);
})
}
and that's not working either, I cant figure out what the problem is...
Thanks
I cant seem to figure out what the issue is,
I have a service that has a behavior subject like so...
popupSource = new BehaviorSubject<any>('');
popup(ponent) {
this.popupSource.next(ponent);
}
then In my header ponent
popupClick() {
this._service.popup('example');
}
then in my header.html
<button (click)="popupClick()"></button>
then In my app ponent
ngOnInit() {
this._service.popupSource.subscribe((result) => {
console.log(result);
})
}
so whats happening is the click is firing the this._service.popup('example');
but its never hitting the subscription...
I've put breakpoints on each function and It succesfully reaches this.popupSource.next(ponent)
but then nothing?? Every Time I click the button I should be getting the console log.
Im not sure what Im doing wrong... Ive left out code for brevity sake so please let me know if you need more information
EDIT
Ive also tried doing
private popupSource = new BehaviorSubject<any>('');
getPopup = this.popupSource.asObservable();
popup(ponent) {
this.popupSource.next(ponent);
}
and the in my app ponent listend to the getPopup instead
ngOnInit() {
this._service.getPopup.subscribe((result) => {
console.log(result);
})
}
and that's not working either, I cant figure out what the problem is...
Thanks
Share Improve this question edited Jun 14, 2018 at 23:22 Smokey Dawson asked Jun 14, 2018 at 23:11 Smokey DawsonSmokey Dawson 9,23022 gold badges85 silver badges161 bronze badges 5- 1 Are you sure that you have the same instance of the service ? where do you provide it ? – Jean-Marc Roy Commented Jun 14, 2018 at 23:23
- I have two seperate modules a main module and an app module, the app ponent is in the appModule and the header ponent is in the mainModule but I provide the service in both modules or should I be exporting it in the appModule and then grabbing it from there in the mainModule?? – Smokey Dawson Commented Jun 14, 2018 at 23:31
- 2 You should not provide in two different module. It creates an instance for each module, that's why it is not working. – Jean-Marc Roy Commented Jun 14, 2018 at 23:35
- @GeoAstronaute so how should I be providing it?? – Smokey Dawson Commented Jun 14, 2018 at 23:36
- @GeoAstronaute Ive taken it off the provider list in mainModule and its still not working.. – Smokey Dawson Commented Jun 14, 2018 at 23:38
3 Answers
Reset to default 14Your issue here is that you provide your service in two different modules, that end up with two instances of your service. The simplest way if you are using Angular v6 is to use the providedIn flag in your service:
import { Injectable } from '@angular/core';
@Injectable({providedIn: 'root'})
class myService {}
With this way you don't need to provide your service in the providers array of any module, it will be automatically provided in the root injector.
Documentation about this can be found here : Angular providers.
If your are using Angular v5 you should only provide your service in your AppModule.
In your service, write a new method like this:
popupSource = new BehaviorSubject<any>('');
getPopupSource() {
return this.popupSource.asObservable();
}
And subscribe to that instead of subscribing directly to the subject itself. You could just add the 'asObservable()' part whenever you subscribe to it instead of creating an entirely new method, but I like the separate method so I can keep the Subject private, and I usually subscribe to something multiple times in different places throughout an app, so it cuts down on repetition.
In your ponent :
this._service.getPopupSource().subscribe( result => { etc...})
EDIT :
Demo recreation of your scenario - https://stackblitz./edit/angular-n6esd5
You may not have the same instance of service, my same problem was that I had @Injectable({ providedIn: 'root'})
for my service, but also I put this service in the ponent providers [] array, just remove the providers array, then it works
本文标签: javascriptBehaviorSubject not working Angular 5Stack Overflow
版权声明:本文标题:javascript - BehaviorSubject not working Angular 5 - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1739916871a2209522.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论