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がリリースされたので、更新する必要があり、メッセージにこの警告がエラーになると表示されます。
ここで実際に何が問題なのか理解しないでください。
基本クラスから@Injectable
デコレータを削除します。 Angularが直接インスタンス化する必要があるクラスに、そのデコレーター(またはそのことについては任意のデコレーター)のみを含める必要があります(その際、インジェクターを使用してコンストラクターパラメーターも解決します)。
あなたの場合、ベースクラスがangularによって直接インスタンス化されないこと(インジェクターが知らないコンストラクターパラメーターを持っている)であることは明らかなので、そこからデコレーターを削除する必要があります。
これは、サービスの親にパラメーターを追加しようとしたためです
A
constructor(logger: loggerService, someData: myData)
B extends A
constructor (logger: loggerService, new myData())
私にとっての解決策は、someDataを設定する別の方法を見つけることでした...