我正在尝试创建一个全局变量来处理何时在我的网站上显示加载器。我遵循了这个,但我收到以下错误。
泛型类型"观察者"需要此行上的 1 个类型参数
this.ShowLoaderChange = new Observable((observer:Observer){
此外,我似乎看不到他们在哪里为ChangeObserver 声明了变量,因为我在这里使用:
this.ShowLoaderChangeObserver = observer;
和这里
this.ShowLoaderChangeObserver.next(this.ShowLoader);
import { Observer } from 'rxjs/Observer';
import { Observable } from 'rxjs/Observable';
import { Injectable } from 'angular2/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class LoaderService {
public ShowLoader;
ShowLoaderChange: Observable<any>;
constructor() {
this.ShowLoaderChange = new Observable((observer:Observer){
this.ShowLoaderChangeObserver = observer;
})
}
setData() {
this.ShowLoader = !this.ShowLoader;
this.ShowLoaderChangeObserver.next(this.ShowLoader);
}
}
编辑:根据下面的答案更改我的代码后,它有意义 类型错误:无法读取 [null] 中未定义的属性"next"这来自生产线
this.ShowLoaderChangeObserver.next(this.ShowLoader);
我像这样调用函数
import {LoaderService} from '../LoaderService'
export class AdminDashboardComponent implements OnInit{
constructor (private loader:LoaderService){}
ngOnInit():any{
this.loader.setData();
}}
编辑:新服务
import { Observer } from 'rxjs/Observer';
import { Observable } from 'rxjs/Observable';
import { Injectable } from 'angular2/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class LoaderService {
public ShowLoader: boolean;
ShowLoaderChange: Observable<boolean>;
ShowLoaderChangeObserver: Observer<boolean>;
constructor() {
this.ShowLoaderChange = new Observable((observer:Observer<boolean>)
=> {
this.ShowLoaderChangeObserver = observer;
})
}
setData() {
this.ShowLoader = !this.ShowLoader;
this.ShowLoaderChangeObserver.next(this.ShowLoader);
}
}
您需要指定可观察量将生成的值类型作为类型参数。在您的情况下,由于您已将观察量键入为 ShowLoaderChange: Observable<any>
,因此您也可以将观察点的类型指定为 any:
this.ShowLoaderChange = new Observable((observer:Observer<any>) => {
this.ShowLoaderChangeObserver = observer;
});
但是查看您的代码,您可能会将可观察量键入为 boolean
并避免使用 any
,因为您只从观察器生成布尔值:
export class LoaderService {
public ShowLoader: boolean;
ShowLoaderChange: Observable<boolean>;
ShowLoaderChangeObserver: Observer<boolean>;
constructor() {
this.ShowLoaderChange = new Observable((observer:Observer<boolean>) => {
this.ShowLoaderChangeObserver = observer;
})
}
setData() {
this.ShowLoader = !this.ShowLoader;
this.ShowLoaderChangeObserver.next(this.ShowLoader);
}
}