我正在尝试创建返回一个类的新实例的自定义装饰器,并且该类必须从注入的服务创建,而我无法弄清楚如何从装饰器函数访问它
自定义装饰器
export function Collection(endpoint: string) {
return function (constructor: any) {
const mainService = CollectionModule.injector.get(MainService);
return mainService.getCollection(endpoint);
};
}
我想从我尝试使用该模块的自定义装饰器访问MainService
,但是injector
属性不存在!
服务
@Injectable()
export class MainService {
config;
getCollection(endpoint: string): Collection {
return new Collection(endpoint, this.config);
}
}
预期用量
export class AppComponent implements OnInit {
@Collection('posts') postsCollection;
ngOnInit() {
console.log(this.postsCollection);
}
}
答案 0 :(得分:0)
您从字段修饰符返回的值将不会用作您假设的字段的值。
您可以通过返回属性描述符来将字段更改为装饰器中的属性,该描述符将进行调用以获取属性的值。
export function Collection(endpoint: string) {
return function (constructor: Object, propertyName: string) {
let descriptor: PropertyDescriptor = {
get(this: any){
const mainService = this["_" + propertyName] || (this["_" + propertyName] = CollectionModule.injector.get(MainService);
return mainService
}
}
return descriptor
};
}