Как загрузить свойство класса из сервиса в Typescript / Angular 5? - PullRequest
0 голосов
/ 24 апреля 2018

Как я могу загрузить объект в Typescript из моего сервиса?

У меня есть сервис, который возвращает объект "MyDetail".

Цель состоит в том, чтобы я заполнил объект MyDetails.

Я получаю ошибку: отсутствует свойство '' в типе BehaviorSubject

MyDetails

export class MyDetails  {
  myDetail: IMyDetail;
  details: Array<{ dataItems: IDataItem }>;
};

Машинопись:

export class MyComponent implements OnInit {
  id: string;
  myDetails: MyDetails;
  myDetail: MyDetail;
  private myDetailSubject = new BehaviorSubject<MyDetail>(this.myDetail);

  constructor(private route: ActivatedRoute, private myDetailService: MyDetailService) {
    route.params.subscribe(x => this.id = x['id'])
  }

  ngOnInit() {
    this.myDetailService.getData(this.id)
      .subscribe(x => {
        this.myDetailSubject.next(x);
        this.myDetails.myDetail = this.myDetailSubject;
      });
  }

}

РЕДАКТИРОВАТЬ:

MyDetail:

export class MyDetail {
   id: string;
   name: string;
   date: Date;
   gizmos: Array<{ gizmo: string }>;
}

1 Ответ

0 голосов
/ 24 апреля 2018

проблема в этой строке

   this.myDetails.myDetail = this.myDetailSubject;

, которую вы назначаете BehaviorSubject<MyDetail> на IMyDetail

, так что вам нужно изменить ее, так как я не знаю, какова вашасервис перезапускается. Я не могу сказать вам, следует ли ему присвоить x или какое-либо свойство x.

Кстати, ваш код кажется ненужным, я думаю, вы можете удалить myDetailSubject вваш компонент и используя результат обслуживания с async pipe или назначьте его частному члену и позвольте угловой привязке изменить ваш пользовательский интерфейс

для примера

<code>export class MyComponent implements OnInit {
  id: string;
  myDetails: MyDetails;

  constructor(private route: ActivatedRoute, private myDetailService: MyDetailService) {
    route.params.subscribe(x => this.id = x['id'])
  }

  ngOnInit() {
    this.myDetailService.getData(this.id)
      .subscribe(x => {
        this.myDetails = x; // or x based on what is return from your service
      });
  }

}

<pre>
  {{myDetails.myDetail | json}}

или

<code>export class MyComponent implements OnInit {
  id: string;
  myDetailSubject$ : SubjectBahvior<MyDetail>;

  constructor(private route: ActivatedRoute, myDetailService: MyDetailService) {
    route.params.subscribe(x => this.id = x['id'])
  }

  ngOnInit() {
    this.myDetailSubject$ = this.myDetailService.getData(this.id);
  }

}

<pre>
  {{myDetailSubject$ | async}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...