我有一个变量:public tick:number;
正在服务中。
该服务注入了另一个服务Timer。它的推出方式如下:
class Service {
constructor(public timer: TimerService)
}
public sendSmsExect(){
// Main sending
}
public sendSms(){
this.timer.run().subscribe((tick => { if(tick == 30) { sendSmsExect(); } }));
}
}
组件:
class MyComponent {
public constructor(public service Service){}
public sendSms(){
this.service.sendSms();
}
}
问题:我需要访问模板中的tick变量:
{{tick}}
我是否真的认为我还需要在组件中订阅tick
并定义相同的变量tick
:
public sendSms(){
this.service.sendSms().subscribe((tick) => this.tick = tick );
}
答案 0 :(得分:3)
您可以考虑使用tick
observable从服务中共享Subject
变量值。通过使其可观察,你不需要订阅它来打开它的滴答值。您需要在HTML上使用| async
管道,它将负责展开tick
的值并将其显示在HTML上。
代码
//don't miss below import
import { Subject } from 'rxjs/Subject';
class MyService {
tick: Subject < number > ();
constructor(public timer: TimerService) {}
sendSmsExect() {
// Main sending
}
tickObservable() {
return this.tick.asObservable();
}
public sendSms() {
this.timer.run().subscribe(tick => {
this.tick.next(tick);
if (tick == 30) {
sendSmsExect();
}
);
}
}
组件
//don't miss below import
import { Observable } from 'rxjs/Observable';
class MyComponent {
tick: Observable<number>();
public constructor(public service: MyService ){}
sendSms(){
this.service.sendSms();
}
ngOnInit(){
this.tick = this.service.tickObservable();
}
}
<强> HTML 强>
{{tick | async}}