Не могу получить доступ к методу вложенного объекта - PullRequest
0 голосов
/ 09 октября 2019

У меня есть такой объект:

export class Foo {
    prop1: string;
    prop2: boolean;

    get computedProp() {
        return 'some computed data';
    }

    constructor(init?: Partial<Foo>) {
        Object.assign(this, init);
    }
}

export class Bar {
    propA: any;
    propFoo: Foo;

    constructor(init?: Partial<Bar>) {
        this.propFoo = new Foo();

        Object.assign(this, init);
    }
}

, который я бы использовал следующим образом:

export class MyComponent {

    private _propBar: Bar;
    get propBar() {
        return this._propBar;
    }
    @Input propBar(value: Bar) {
        // value is a json data fetched from api for example
        this._propBar = new Bar(value);
    }

}

Это должно создать новый объект Bar () и дать мне доступдля всех свойств, но свойство Foo построено неправильно, поэтому computedPro недоступен и выдает ошибку в привязке данных в html.

Я пробовал пакет https://www.npmjs.com/package/class-transformer?activeTab=readme, но безрезультатный результат.

Есть идеи? Чего мне не хватает?

Спасибо

Я создаю этот стек, чтобы проиллюстрировать проблему: https://stackblitz.com/edit/angular-xtgu6v?file=src%2Fapp%2Fapp.component.ts

1 Ответ

1 голос
/ 09 октября 2019

В вашем демонстрационном коде вы должны изменить конструктор Bar на

constructor(init?: Partial<Bar>) {
    Object.assign(this, init);
    this.foo=new Foo(init.foo); // you will need to assign new foo object here else it will assign  {propA: 5, propB: 10 } to foo and sum will be undef
  }

вместо

 constructor(init?: Partial<Bar>) {
        Object.assign(this, init);
      }

демо

...