Una pregunta parece bastante simple, pero no trabajo con OOP en absoluto. Tengo una clase de padres. Quiero que se inyecte el servicio en el constructor y que pase todos los argumentos necesarios en la clase principal. Solo quiero tener una clase abstracta a partir de la cual pueda crear clases más complejas.
Digamos que la clase principal se ve así:
export class FormComponent { constructor(childArgs: someType, private readonly SthService){ this.sth = childArgs.sth; // etc } }donde childArgs son argumentos que quiero pasar al componente principal y SthService privado de solo lectura es un servicio inyectable que quiero usar en el componente
La clase infantil se ve así.
@Component({ selector: '...', templateUrl: './....html', styleUrls: ['./....scss'] }) export class ChildComponent extends FormComponent { constructor(){ super({ firstProp: X, secondProp: Y, thirdProp: Z, }); }¿Qué estoy haciendo mal? ¿Puedo simplemente pasar los argumentos e inyectar el servicio por completo? Porque en este momento dice que SthService no está definido.
No está proporcionando los parámetros correctos de la clase base FormComponent en la clase derivada ChildComponent . Entonces, su constructor de ChildComponent debería verse así:
export class ChildComponent extends FormComponent { constructor(childArgs: someType, private readonly SthService){ super(childArgs, SthService) } }Es necesario pasar los argumentos necesarios del constructor de la clase base en la clase derivada.
Así que este es un ejemplo de código de envío de parámetros a la clase base:
class Human { constructor( public name: string, public age: number ){} } class Employee extends Human { constructor( public name: string, public age: number, public dateHired: Date ) { super(name, age) } }use @inject('variable name') para pasar otros objetos. Supongo que el nombre de su clase de servicio es ServiceClass .
export class FormComponent { constructor(@Inject('childArgs') childArgs: any, private readonly SthService: ServiceClass){ this.sth = childArgs.sth; // etc } }