我有一个服务,组件和模块。
在服务中,我希望发送标志$变量的更改。
export class ListUserService {
public flag$ = new Subject< boolean >();
}
此组件对变量进行更改
export class ListUserComponent implements OnInit {
private flagPerfil = false;
getFlag() {
return this.flagPerfil;
}
constructor(private listUserService: ListUserService) {
}
functionThatGetsCalledWhenTheFlagIsChanged(){
this.listUserService.flags$.next(this.flagPerfil);
}
}
我需要在此模块中接收变量标志$:
export class Tab1PageModule {
public flagPerfil: boolean;
constructor(private listUserService: ListUserService) {
listUserService.flag$.subscribe((flag)=>{
console.log('FLAG', flag); //never show the console
this.flagPerfil = flag;
});
}
}
从未进入此控制台主题,但出现此错误主题TS2322:类型‘console.log('FLAG', flag);
’不可分配给类型'boolean',并且在模块的视图中什么也不显示
<ion-card-title> {{flagPerfil}} Puedes agregarlos para iniciar una amistad</ion-card-title>
发布于 2019-05-30 07:51:26
使用一个行为主体,因为它们有一个默认值,任何新的观察者都会得到最后一个发出的值,主体只会在他们发出时通知观察者,最后一个值会丢失给新的观察者。
export class ListUserService {
public flag$ = new BehaviorSubject<boolean>(false);
}
const { Subject, BehaviorSubject } = rxjs;
const subject$ = new Subject();
subject$.next('Subject initial val');
const behaviorSubject$ = new BehaviorSubject('BehaviorSubject initial val');
subject$.subscribe(val => { console.log(val); });
behaviorSubject$.subscribe(val => { console.log(val); });
subject$.next('Subject new val');
behaviorSubject$.next('BehaviorSubject new val');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>
在你的组件中使用异步管道,这样你就不需要订阅代码了。
export class ListUserComponent implements OnInit {
flags$ = this.listUserService.flags$;
constructor(private listUserService: ListUserService) {
}
functionThatGetsCalledWhenTheFlagIsChanged(value: boolean){
this.listUserService.flags$.next(value);
}
}
在视图模板中
<ion-card-title> {{flag$ | async}} Puedes agregarlos para iniciar una amistad</ion-card-title>
https://stackoverflow.com/questions/56369856
复制相似问题