要在Angular的effects中访问组件提供者,可以使用@Injectable
装饰器中的providedIn: 'root'
选项来提供服务,并且将服务注入到组件的构造函数中。然后在effects中通过依赖注入来访问组件提供者。
下面是一个示例代码:
DataService
的服务,并将其提供给根组件。import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class DataService {
getData() {
return 'Hello World';
}
}
DataService
注入到构造函数中。import { Component } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-root',
template: `
{{ data }}
`,
})
export class AppComponent {
data: string;
constructor(private dataService: DataService) {
this.data = this.dataService.getData();
}
}
import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { DataService } from './data.service';
import { map } from 'rxjs/operators';
@Injectable()
export class DataEffects {
loadData$ = createEffect(() =>
this.actions$.pipe(
ofType('LOAD_DATA'),
map(() => {
const data = this.dataService.getData();
return { type: 'DATA_LOADED', payload: data };
})
)
);
constructor(private actions$: Actions, private dataService: DataService) {}
}
在上述代码中,DataEffects
依赖注入了DataService
,然后在loadData$
effect中可以通过this.dataService.getData()
来访问组件提供者。