Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

216
Vistas
No se puede acceder/obtener el valor de las propiedades de la clase abstracta (base) de la clase derivada - TypeScript

Tengo 2 clases: una es abstracta y otra clase la está extendiendo. En la clase ABSTRACT, tengo algunas propiedades públicas/protegidas que ESTÁN inicializadas en el constructor. Que sea abstracto Padre e Hijo extienden Padre

Preguntas:

  1. ¿Por qué, cuando trato de obtener el valor de las propiedades de una clase abstracta como: super.somePropertyOfParent siempre está SIN DEFINIR, pero cuando lo llamo como: this.somePropertyOfParent TIENE valor? Lógicamente, el superconstructor siempre se llama primero, por lo que estos campos deben inicializarse en primer lugar.

  2. Tengo 2 BehaviourSubjects (countryValue, languageValue) en mi clase abstracta principal, que se inicializan con algún 'valor inicial' en el constructor. En la clase Child en el método OnInit (que obviamente se llama después del constructor Parent), me suscribo a Parent's BehaviourSubjects como: this.countryValue.subscribe(...) y recibe el valor 'INITIAL'. Luego, en la clase de padres, el método ngOnChange llama a subject.next (...), pero Child no recibe un nuevo valor... ¿por qué?

PD: si hace que las propiedades de BehaviourSubject sean ESTÁTICAS y consulte ClassName.property, todo funciona bien.

Por favor, vea el código a continuación:

 @Directive() export abstract class IbCustomElementComponent implements OnChanges{ @Input('data-country') country = ''; @Input('data-language') language = ''; public countryValue:BehaviorSubject<string>; public languageValue:BehaviorSubject<string>; protected constructor(public translateService: TranslateService) { this.countryValue = new BehaviorSubject<string>('initial'); this.languageValue = new BehaviorSubject<string>('initial'); } abstract customElementReady(changes: SimpleChanges): void; ngOnChanges(changes: SimpleChanges) { if (this.country && this.language) { this.translateService.use(this.country.toLocaleLowerCase() + '-' + this.language); this.customElementReady(changes); this.countryValue.next(this.country); this.languageValue.next(this.language); } } }

 export class CustomerCardsComponent extends IbCustomElementComponent implements OnInit { displayedColumns: string[] = ['fieldName', 'value']; CARD_DATA: CardData[][] = []; dataSource = this.CARD_DATA; cards: Card[] = []; currentCustomer : Customer = new Customer(); constructor(private customerListService: CustomerListService, public override translateService: TranslateService) { super(translateService); } ngOnInit(): void { this.countryValue.subscribe(c=>{ this.currentCustomer.bic = Bic[c.toUpperCase()]; if(this.currentCustomer.bic){ this.getCustomerCards(this.currentCustomer) } }) } }
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En primer lugar, la razón por la que no puede llamar a super.somePropertyOfParent es porque su clase abstracta no se inicializa por separado de su clase derivada; su clase derivada simplemente hereda todas las propiedades de la clase abstracta. Por eso llamas this y no super .

Para el lado ngOnChanges de las cosas, creo que lo que está sucediendo es que no se llama al método de su clase abstracta porque, según tengo entendido, los componentes/directivas angulares son molestos cuando se trata de enlaces de ciclo de vida heredados. Sé que he tenido problemas con OnInit y OnDestroy en el pasado.

Intentaría implementar OnChanges en su clase derivada de la siguiente manera:

 ngOnChanges(changes: SimpleChanges) { super.ngOnChanges(changes); }

Por lo tanto, solo usa super cuando se refiere a la implementación de un método de la clase principal, y no para las propiedades que su clase secundaria hereda automáticamente.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda