web-dev-qa-db-ja.com

警告:UsersPermissionsServiceのすべてのパラメーターを解決できないAngular v5.xでエラーになります

Ng build -prodを実行すると、次の警告が表示されます。

Warning: Can't resolve all parameters for UsersPermissionsService in C:/SourceControl/Test.Client/src/app/shared/users/users-permissions.service.ts: (?, ?, ?). This will become an error in Angular v5.x
Warning: Can't resolve all parameters for UsersPermissionsService in C:/SourceControl/Test.Client/src/app/shared/users/users-permissions.service.ts: (?, ?, ?). This will become an error in Angular v5.x

私のコードは次のとおりです。

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

@Injectable()
export class UsersPermissionsService {

    public USERS_CREATE_PERMISSION: string = '';
    public USERS_UPDATE_PERMISSION: string = '';
    public USERS_DELETE_PERMISSION: string = '';

    constructor(public UsersCreatePermission: string,
        public UsersUpdatePermission: string,
        public UsersDeletePermission: string) {
        this.USERS_CREATE_PERMISSION = UsersCreatePermission;
        this.USERS_UPDATE_PERMISSION = UsersUpdatePermission;
        this.USERS_DELETE_PERMISSION = UsersDeletePermission;
    }
}


@Injectable()
export class UserModulePermissionsService extends UserPermissionsService {
    constructor() {
        super("ClientsCreate",
            "ClientsEdit",
            "ClientsDelete");
    }
}

@Component({
    templateUrl: './users-permissions.component.html',    
    providers: [UsersPermissionsService]
})
export class UsersPermissionsComponent {
    constructor(public usersPermissionsService: UsersPermissionsService) {

    }
}

そして、私の遅延ロードされたモジュールには次のものがあります:

 providers: [
        { provide: UsersPermissionsService, useClass: UserModulePermissionsService }
    ]

angular 5がリリースされたので、更新する必要があり、メッセージにこの警告がエラーになると表示されます。

ここで実際に何が問題なのか理解しないでください。

15
pantonis

基本クラスから@Injectableデコレータを削除します。 Angularが直接インスタンス化する必要があるクラスに、そのデコレーター(またはそのことについては任意のデコレーター)のみを含める必要があります(その際、インジェクターを使用してコンストラクターパラメーターも解決します)。

あなたの場合、ベースクラスがangularによって直接インスタンス化されないこと(インジェクターが知らないコンストラクターパラメーターを持っている)であることは明らかなので、そこからデコレーターを削除する必要があります。

32
Aviad P.

これは、サービスの親にパラメーターを追加しようとしたためです

A
   constructor(logger: loggerService, someData: myData)

B extends A
    constructor (logger: loggerService, new myData())

私にとっての解決策は、someDataを設定する別の方法を見つけることでした...

0
Pipo