【问题标题】:Angular 6 and typescript child class extends from parent class and banish child variablesAngular 6 和 typescript 子类从父类扩展并消除子变量
【发布时间】:2020-02-06 17:05:50
【问题描述】:

我有一个名为ParentServiceabstract class 及其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",
  };
}

app-componentconstructor 中我声明了子实例如下:

constructor(private child_instance:ChildService){}

在浏览器控制台中打印 child_instance 时,我得到:

 ParentService {word: {…}}

没有extends ParentService 我得到了:

 ChildService {word2: {…}}

但我需要将两个变量放在同一个类中:

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

我怎样才能做到这一点?

【问题讨论】:

  • 构造函数中不能有child和parent两个参数吗?

标签: javascript angular typescript angular6


【解决方案1】:

在澄清@Satish Pai 之后,我创建了一个解决方法:

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 中(偶数函数)

建议:您可以在gkeys 上应用一些regex,以仅复制某些functionsvariables

【讨论】:

    【解决方案2】:

    您需要在child.service 构造函数中调用super()

    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: {…}}
     }
    }
    

    【讨论】:

    • super(); 对我不起作用,仍然只能得到 ParentService 变量。
    • @GiancarloBenítez 您是否尝试过在父服务中不使用抽象关键字?
    • 打开控制台查看日志,应该可以了stackblitz.com/edit/…
    • abstract 这个词是的,我也试过publicstatic 的组合,没有。我通过控制台检查了它们。我知道它应该......但没有运气。
    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多