20

当我运行 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 出来了,我需要更新,正如消息所说,这个警告将变成一个错误。

不明白这里真正的问题是什么。

4

3 回答 3

42

@Injectable从基类中移除装饰器。您应该只在 Angular 应该直接实例化的类中包含该装饰器(或任何装饰器)(并且在这样做的同时还使用注入器解析它们的构造函数参数)。

由于很明显,在您的情况下,基类不会直接由 angular 实例化(它具有注入器不知道的构造函数参数),因此您应该从中删除装饰器。

于 2017-11-10T12:35:49.937 回答
1

如果有人在构建 Angular 应用程序时遇到此问题,以下步骤对我有用:

1)在运行构建命令时注意错误,示例 示例错误类似于

2) 现在检查同一个组件的构造函数服务注入 构造函数服务注入

3)现在进入每个服务并确保删除默认导出 我的情况我在这里有默认导出

4)现在您需要在导入此服务的所有地方进行更改。您需要使用 { AlertService } 之类的花括号导入命名导出,而不是 AlertService

于 2019-11-30T17:21:26.847 回答
0

得到这个是因为我试图向服务的父级添加一个参数

A
   constructor(logger: loggerService, someData: myData)

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

我的解决方案是找到另一种设置 someData 的方法...

于 2019-02-08T22:58:03.193 回答