Angular,数组上的订阅不起作用
2018-02-24
6444
我正在做一个 alert.service。我的服务包含一个名为 Alert 的模型数组。
这是 alert.service
@Injectable()
export class AlertService {
private queue: Alert[] = new Array<Alert>();
constructor() { }
getInstance() : Observable<Alert[]> {
return of(this.queue);
}
push(type: string, title: string, message: string) {
let alert = new Alert(type, title, message);
this.queue.push(alert);
window.setTimeout(_ => {
this.pop();
},3000);
}
pop() {
this.queue.pop();
}
}
从我的 alert.component,我调用此服务并订阅队列的可观察对象:
export class AlertComponent implements OnInit {
public alert: string = `
<div class="alert [type]">
<span>[title]</span>
<p>[message]</p>
</div>`;
constructor(private alertService: AlertService) { }
ngOnInit() {
this.alertService.getInstance().subscribe(val => {
console.log(val);
});
}
success() {
this.alertService.push('error', 'ninja', 'hahahahahahah hahhahaha hahah hah');
}
}
在我的模板中,我单击一个按钮,该按钮触发方法
success()
(被调用)。
但 console.log(val) 只返回一次值。这是我的队列服务数组实例化时的值。
我做错了什么?
感谢您的帮助!
1个回答
最后,
我管理自己以在数组上使用 BehaviorSubject。
@Injectable()
export class AlertService {
private queue: Alert[] = new Array<Alert>();
private behaviorSubjectQueue: BehaviorSubject<Alert[]> = new BehaviorSubject<Alert[]>(this.queue);
constructor() {
}
getInstance() {
return this.behaviorSubjectQueue;
}
push(type: string, title: string, message: string) {
let alert = new Alert(type, title, message);
this.queue.push(alert);
this.behaviorSubjectQueue.next(this.queue);
window.setTimeout(_ => {
this.pop();
},3000);
}
pop() {
this.queue.pop();
this.behaviorSubjectQueue.next(this.queue);
}
}
组件保持不变,但每次推送和弹出操作时都会收到通知。
谢谢大家的帮助!
Yoann Picquenot
2018-02-24