编写自定义装饰器,如何从装饰器函数中访问Angular服务?

时间:2018-11-27 09:52:22

标签: angular typescript

我想要什么:

Component({
    ...
})
export MyComponent {
    @URLParam('id') 
    private id

    ngOnInit() {
        console.log(this.id)
    }
}

这里的问题是我需要在自定义装饰器函数中使用ActivatedRoute

所以现在装饰器功能看起来像

export function URLParam(value): PropertyDecorator {

    function DecoratorFactory(target: any, propertyKey: string): void {
        let subscription
        const targetNgOnDestroy = target.ngOnDestroy || function (){}
        const targetNgOnInit = target.ngOnInit || function (){}

        function ngOnInit() {
            subscription = activatedRoute.params.subscribe(params => target[propertyKey] = params[value])
            targetNgOnInit.apply(this)
        }

        function ngOnDestroy() {
            subscription.unsubscribe()
            targetNgOnInit.apply(this)
        }

        target.ngOnDestroy = ngOnDestroy
        target.ngOnInit = ngOnInit
    }

    return DecoratorFactory;
}

问题是,我无法从ActivatedRoute获得对@angular/router的访问权限,而该访问权限通常是通过类中的DI访问的。

如何将其传递到自定义装饰器函数中?

0 个答案:

没有答案