gpt4 book ai didi

angular - 依赖注入(inject)抽象类 typescript (Angular2)

转载 作者:太空狗 更新时间:2023-10-29 16:58:10 24 4
gpt4 key购买 nike

我有抽象类(没有构造函数),我想向其中注入(inject)另一个类。

抽象类:

import { ErrorHandler } from '../../shared/services/errorHandler.service';
import { Inject } from '@angular/core';


export abstract class BaseApiComponent<T> {
@Inject(ErrorHandler) errorHandler: ErrorHandler;

this.errorHandler.test();
}

注入(inject)类:

import { Injectable } from '@angular/core';

@Injectable()
export class ErrorHandler {
constructor() { }


public test() {
console.log('Test');
}

}

我有下一个错误

ORIGINAL EXCEPTION: TypeError: Cannot read property 'test' of undefined

我该如何解决这个问题?

最佳答案

从 Angular 2 RC5 开始,DI 变得更简单了。你不需要用 @Injectable() 来装饰这些东西。相反,您只需在一个地方为 DI 声明它 - NgModule。

export class ErrorHandler {
test() {
console.log('ErrorHandler.test()');
}
}

export abstract class BaseApiComponent<T> {
// use protected property parameter in abstract class
// for accessibility from descendants.
constructor(protected errorHandler: ErrorHandler) {}

someMethod() {
this.errorHandler.test();
}
}

export class ApiComponentImpl<T> extends BaseApiComponent<T> {
// use @Inject decorator
constructor(@Inject(ErrorHandler) errorHandler: ErrorHandler) {
super(errorHandler);
}
}

app.module.ts:

// class declarations
@NgModule({
providers: [
ErrorHandler,
ApiComponentImpl
]
})
export class AppModule{
}

// bootstrap the app
platformBrowserDynamic().bootstrapModule(AppModule);

您可以使用 OpaqueToken 来改进模块化并消除类型依赖:

export const errorHandlerToken = new OpaqueToken('ErrorHandler');

在模块中:

    providers: [
// using OpaqueTokens you can change the provided value
// to anything without changing consumer code
{provide: errorHandlerToken, useClass: ErrorHandler},

构造函数:

    constructor(@Inject(errorHandlerToken) errorHandler: ErrorHandler) {

关于angular - 依赖注入(inject)抽象类 typescript (Angular2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39224865/

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