wake-up-neo.com

Warnung: Alle Parameter für UsersPermissionsService können nicht aufgelöst werden. Dies wird zu einem Fehler in Angular v5.x

Wenn ich ng build -prod starte, erhalte ich die folgende Warnung.

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

Mein Code lautet wie folgt:

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) {

    }
}

und in meinem faul geladenen Modul habe ich:

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

Jetzt, da Winkel 5 nicht mehr vorhanden ist, muss ich ein Update durchführen, da diese Warnung zu einem Fehler wird.

Verstehe nicht, was hier wirklich das Problem ist.

10
pantonis

Entfernen Sie den @Injectable-Dekorator aus der Basisklasse. Sie sollten diesen Dekorateur (oder einen beliebigen Dekorateur für diese Angelegenheit) nur in Klassen einschließen, die Angular direkt instanziieren soll (und dabei auch ihre Konstruktorparameter mit dem Injektor auflösen).

Da es offensichtlich ist, dass in Ihrem Fall die Basisklasse nicht direkt von angle instanziiert werden soll (sie verfügt über Konstruktorparameter, die dem Injektor nicht bekannt sind), sollten Sie die Dekoratoren daraus entfernen.

22
Aviad P.

Das habe ich bekommen, weil ich versucht habe, den Eltern eines Dienstes einen Parameter hinzuzufügen

A
   constructor(logger: loggerService, someData: myData)

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

Die Lösung für mich war, einen anderen Weg zu finden, einige Daten zu setzen ...

0
Pipo