我试图将服务中的函数注入到组件中重要的是要注意,函数在组件中工作,但是当我试图从服务中注入它时,它不起作用(没有错误,代码不起作用)
我的服务:
@Injectable({
providedIn: 'root'
})
export class ElevatorService {
floor = new ReplaySubject<number>(1);
floorNumber: number = -1;
constructor() { }
up() {
const floor = this.floor;
floor.pipe(
take(1),
filter((v) => v < 20),
map((v) => v + 1)
)
.subscribe((v) => this.floor.next(v));
return floor;
}
我component.ts
:
export class ElevatorComponent implements OnInit {
constructor(private elevatorService: ElevatorService) { }
ngOnInit(): void {
}
up() {
this.elevatorService.up();
}
我component.html:
<input type="button" value="Up" (click)="up()" >
原因是您的ReplaySubject
没有初始值。您必须在init上设置初始值:
export class ElevatorService {
floor = new ReplaySubject<number>(1);
floorNumber: number = -1;
constructor() {
this.floor.next( ... // initial value);
}
up() {
const floor = this.floor;
floor.pipe(
take(1),
filter((v) => v < 20),
map((v) => v + 1)
)
.subscribe((v) => this.floor.next(v));
return floor;
}
}
如果你不需要ReplaySubject,也许是因为不需要重复的值,-只需在构造函数中使用BehaviorSubject
初始状态:
floor = new BehaviorSubject<number>(1);
这里有一个Stackblitz供您使用。