Angular 6 и машинописный дочерний класс расширяются от родительского класса и запрещаются sh дочерние переменные - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть abstract class с именем ParentService и его child class ChildService следующим образом:

ParentService

import { Injectable } from '@angular/core';
import { MyModel} from './mymodel-model.service';
@Injectable({
  providedIn: 'root'
})
export abstract class ParentService {
  constructor() { }
  word:MyModel = { 
    "AA":"AA",
    "BB":"BB",
  }
}

ChildService

import { Injectable } from '@angular/core';
import { MyModel} from './mymodel-model.service';
import { ParentService } from './parent.service';
@Injectable({
  providedIn: 'root'
})
export class ChildService extends ParentService {
  word2:MyModel = {
    "AA":"AA2",
    "BB":"BB2",
  };
}

В constructor из app-component я объявил дочерний экземпляр следующим образом:

constructor(private child_instance:ChildService){}

При печати child_instance в консоли браузера я получаю:

 ParentService {word: {…}}

Без extends ParentService Я получил:

 ChildService {word2: {…}}

Но мне нужно, чтобы обе переменные были в одном классе:

ChildService {word: {…},word2: {…}}
//or
ParentService {word: {…},word2: {…}}

Как я могу сопоставить sh это?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

вам нужно вызвать super() внутри вашего child.service конструктора.

export class ParentService {
  constructor() { }
  word = { 
    "AA":"AA",
    "BB":"BB",
  }
}

export class ChildService extends ParentService {
  word2 = {
    "AA":"AA2",
    "BB":"BB2",
  };

  constructor() {
    super();
    console.log(this); // prints ChildService {word: {…}, word2: {…}}
 }
}
0 голосов
/ 06 февраля 2020

После разъяснения @ Сати sh Пай я создал работу вокруг:

В классе ParentService:

/* Some code here... */
export class ParentService {
  constructor() { }
  word:Lang = {
    "ES":"ESP",
    "EN":"ENG",
  }
/* Some code here... */
}

В классе ChildService:

/* Some code here... */
export class ChildService{
  constructor(){
    var gParent:ParentService = new ParentService();
    var gkeys = Object.keys(gParent);
    for(var i = 0; i < gkeys.length; i++){
      this[gkeys[i]] = gParent[gkeys[i]];
    }
  }
  /* Some code here... */
}

ПРЕДУПРЕЖДЕНИЕ: это скопирует все ParentClass в ChildClass (четные функции)

Предложение: Вы можете подать заявку некоторые regex сверх gkeys для копирования только определенных functions или variables.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...