我有两个部分,第二个部分根据第一个部分中选择的名称而变化。
如果在第一个组件中选择“ Bryan”,则我的服务应在数据库中获取有关Bryan的信息,然后移至第二个组件,因为它具有使用信息生成表的功能。
我尝试使用Subject类,但是无法将emit与可观察到的HTTP请求的返回关联。
模板
<form class="mt-4" [formGroup]="managerForm">
<ng-container *ngFor="let teamSale of teamSales">
<label for="ManagerName" class="mt-2">{{ teamSale }}</label>
<select id="ManagerName" class="form-control form-control-sm" formControlName="ManagerName" (change)="getAccountsByName()">
<ng-container *ngFor="let manager of managers">
<option *ngIf="manager.Team === teamSale" [value]="manager.Name">{{ manager.Name }}</option>
</ng-container>
</select>
<hr>
</ng-container>
</form>
服务
import { Injectable } from "@angular/core";
import { HttpClient } from '@angular/common/http';
import { Observable, Subject } from 'rxjs';
import { Account } from 'src/app/models/account-model';
@Injectable({ providedIn: 'root' })
export class QuotationService {
private urlAPI: string = 'http://localhost:9095';
private quotationByManegerSource = new Subject<Account[]>();
public quotationByManeger$ = this.quotationByManegerSource.asObservable();
constructor(private http: HttpClient) { }
public getAccountsByName(managerName: string): Observable<Account[]> {
const url: string = `${this.urlAPI}/get-accounts-by-name/${managerName}`
return this.http.get<Account[]>(url)
}
}
我希望在选择名称时,将数据库中引用该名称的信息传递给另一个组件。
然后让第二个组件侦听第一个组件中所做的更改。
答案 0 :(得分:1)
您可以在服务中创建主题
messageSource: Subject<string>;
并在您的构造函数中实例化
this.messageSource = new Subject<string>();
您可以在组件中执行此操作
this.yourService.messageSource.next('whatvermessage');
如果您想订阅它,可以
this.yourService.messageSource.asObservable().subscribe((value: string) => {
});