Я получаю данные из веб-API через угловую 6.
Я создал сервис с функцией выборки, которая вызывается в конструкторе компонентов, который будет несколько раз создаваться на одной и той же странице.
Моя проблема в том, что служба вызывается каждый раз, когда создается экземпляр моего компонента.
Например, мой код следующий:
Служба:
import { Injectable } from '@angular/core';
import { Article } from '../../Classes/article'
import { Observable } from 'rxjs';
import { MessageService } from '../../Services/message/message.service'
import { HttpClient } from '@angular/common/http'
@Injectable({
providedIn: 'root'
})
export class ArticleService {
Values: Observable<Article[]> ;
constructor(private messageService: MessageService, private http : HttpClient)
{
this.buildArticles()
}
private articlesUrl = 'http://localhost:63138/v/Article'
private buildArticles(): void {
this.Values = this.http.get<Article[]>(this.articlesUrl)
}
getArticles() : Observable<Article[]> {
return this.Values
}
}
Мой компонент:
import { Component,OnInit, Input } from '@angular/core';
import { ArticleService } from 'src/app/Services/article/article.service';
import { Article } from 'src/app/Classes/Article'
@Component({
selector: 'app-article',
templateUrl: './article.component.html',
styleUrls: ['./article.component.scss'],
})
export class ArticleComponent implements OnInit {
@Input() artId :number;
constructor( private articleService : ArticleService) {
articleService.getArticles().subscribe(x=> this.articles = x);
}
articles : Article[];
ngOnInit(): void {
}
}
с компонентом html:
<mat-form-field>
<mat-select [(ngModel)]="artId" >
<mat-option *ngFor="let art of articles" [value]="art.Id">
{{art.Libelle1}}</mat-option>
</mat-select>
</mat-form-field>
Теперь в моем приложении я бы хотел, чтобы метод выборки службы вызывался один раз, и каждый раз повторно использовал данныеЯ создаю новый компонент.
В app.module.ts я помещаю providers: [ArticleService]
в @NgModule
, но я получаю запрос к моему веб-API для каждого экземпляра компонента.