gpt4 book ai didi

angular - 使用 Angular Ivy 抽象 @Injectable 不起作用

转载 作者:行者123 更新时间:2023-12-04 14:47:44 24 4
gpt4 key购买 nike

更新

  • 此问题已打开问题 https://github.com/angular/angular/issues/34721

  • 介绍

    在 Angular 服务中使用装饰器提供 @Injectable .
    @Injectable() // -> works
    export class MyService {
    constructor() {}
    }

    抽象@Injectable

    在 Ivy 之前,可以为 @Injectable 构建抽象(例如,用于动态配置提供者,增强服务类)。

    以下代码段显示了一个示例 @Injectable可以包裹。
    function InjectableEnhanced() {
    return <T extends new (...args: any[]) => InstanceType<T>>(target: T) => {
    Injectable({ providedIn: "root" })(target);
    };
    }

    使用装饰器 InjectableEnhanced (见上文)在 Ivy 启用时不起作用。
    截断的以下代码会导致运行时错误。
    @InjectableEnhanced() // -> does not work
    export class MyService {
    constructor() {}
    }

    运行时错误

    使用 @InjectableEnhanced 编译服务with angular/cli 有效,但浏览器中显示以下错误。对应的项目可以在 https://github.com/GregOnNet/ng-9-inject.git找到.

    enter image description here

    也许,Angular 编译器会进行一些代码转换,但无法再解析其他装饰器中的 @Injectable。
    查看 angular 存储库,可以在 injectable.ts 中找到对 JIT 编译器的引用。 (见: https://github.com/angular/angular/blob/master/packages/core/src/di/injectable.ts#L14)。



    还有办法抽象@Injectable吗?

    用于复制的存储库

    https://github.com/GregOnNet/ng-9-inject.git

    最佳答案

    可以使用一些 angular 的内部 API 创建自定义提供程序:

    import { ɵɵdefineInjectable, ɵɵinject } from "@angular/core";

    export function InjectableEnhanced() {
    return <T extends new (...args: any[]) => InstanceType<T>>(target: T) => {
    (target as any).ɵfac = function() {
    throw new Error("cannot create directly");
    };

    (target as any).ɵprov = ɵɵdefineInjectable({
    token: target,
    providedIn: "root",
    factory() {
    // ɵɵinject can be used to get dependency being already registered
    const dependency = ɵɵinject(Dependency);
    return new target(dependency);
    }
    });
    return target;
    };
    }

    可以在 https://github.com/GregOnNet/ng-9-inject 找到工作示例

    关于angular - 使用 Angular Ivy 抽象 @Injectable 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59671530/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com