警告:无法解析 UsersPermissionsService 的所有参数这将成为 Angular v5.x 中的错误
Warning: Can't resolve all parameters for UsersPermissionsService This will become an error in 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 已经出来了,我需要更新,正如消息所说,这个警告将变成一个错误。
不明白这里真正的问题是什么。
从基础 class 中删除 @Injectable
装饰器。您应该只在 class 应该直接实例化的 class 上包含该装饰器(或与此相关的任何装饰器)(并且在这样做的同时还使用注入器解析它们的构造函数参数)。
因为很明显,在你的例子中,基础 class 不会被 angular 直接实例化(它有注入器不知道的构造函数参数),你应该删除来自它的装饰器。
得到这个是因为我试图向服务的父级添加参数
A
constructor(logger: loggerService, someData: myData)
B extends A
constructor (logger: loggerService, new myData())
我的解决方案是找到另一种设置 someData 的方法...
如果有人在构建 angular 应用程序时遇到此问题,以下步骤对我有用:
1) 注意 运行 构建命令时的错误,示例
2) 现在检查同一个组件的构造函数服务注入
3) 现在进入每个服务并确保删除默认导出
4) 现在你需要在导入这个服务的所有地方进行更改。
您需要使用大括号导入命名导出,例如 { AlertService } 而不是 AlertService
当我 运行 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 已经出来了,我需要更新,正如消息所说,这个警告将变成一个错误。
不明白这里真正的问题是什么。
从基础 class 中删除 @Injectable
装饰器。您应该只在 class 应该直接实例化的 class 上包含该装饰器(或与此相关的任何装饰器)(并且在这样做的同时还使用注入器解析它们的构造函数参数)。
因为很明显,在你的例子中,基础 class 不会被 angular 直接实例化(它有注入器不知道的构造函数参数),你应该删除来自它的装饰器。
得到这个是因为我试图向服务的父级添加参数
A
constructor(logger: loggerService, someData: myData)
B extends A
constructor (logger: loggerService, new myData())
我的解决方案是找到另一种设置 someData 的方法...
如果有人在构建 angular 应用程序时遇到此问题,以下步骤对我有用:
1) 注意 运行 构建命令时的错误,示例
2) 现在检查同一个组件的构造函数服务注入
3) 现在进入每个服务并确保删除默认导出
4) 现在你需要在导入这个服务的所有地方进行更改。 您需要使用大括号导入命名导出,例如 { AlertService } 而不是 AlertService