Как подготовить данные asyn c? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть асинхронные c данные, которые я отображаю в шаблоне:

 <div *ngFor="let application of (applicationService.applications | async)"></div>

У объекта application есть рабочие свойства: [{id: 1, name: "O"}]

Также у меня есть сервис WorkerService . Мне нужно создать для каждого приложения собственный экземпляр WorkerService, а затем использовать его в шаблоне, например:

<div *ngFor="let application of (applicationService.applications | async)">
      <div *ngFor="let workers of application.workerService.get()"></div>
 </div>

Как это сделать правильно?

Мое решение:

class Application {
   private application: Application;

   constrcutor(public application, public workerService: WorkerService) {
        this.workerService(this.application.workers);
   }

    getWorkers() {
       return workerService.get();
    }

}

Затем сопоставьте его:

@Injectable()
export class ApplicationService {
    loadApplication(): Observable<any> {
        return request.get().pipe(map(application) => new Application(application, this.workerService)));
    }
}

Затем для использования в шаблоне:

 <div *ngFor="let application of (applicationService.loadApplication() | async)">
     <div *ngFor="let workers of appliction.getWorkers()"></div>
  </div>

Мне не нравится, что ApplicationService зависит от WorkerService, потому что для этого требуется Application(application, this.workerService) в ответе карты.

Не могли бы вы сказать, как это сделать более правильно?

1 Ответ

1 голос
/ 09 июля 2020

Angular позволяет вам определять объем услуг. Если вы хотите объявить службу в области действия компонента, вы можете просто объявить службу в массиве поставщиков компонента. Есть хорошая документация по Angular .io Вот так -

@Component({
    selector: 'my-component',
    providers: [
        myService
    ]
})
export class myComponent {
    ...
}

Таким образом, каждый экземпляр компонента получит отдельный экземпляр службы.

Что касается выбора между отдельными экземплярами службы или одним экземпляром для всего приложения, это полностью зависит от того, что вам нужно.

Если ваша служба будет содержать данные о состоянии, которые относятся только к этому компоненту и не требуются другим компоненты, и вы хотите очистить эти данные состояния при уничтожении компонента, тогда вы можете объявить его в области действия компонента. Таким образом, существует четкая граница между несколькими экземплярами компонентов.

С другой стороны, если ваше приложение должно поддерживать состояние всех компонентов в одном месте, и компоненты должны взаимодействовать друг с другом, чтобы для работы, то вы можете объявить его в области видимости модуля. Таким образом, все компоненты будут иметь доступ к одному экземпляру службы, и служба сможет управлять состоянием всех компонентов.

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