首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问接口类型记录中的属性

如何访问接口类型记录中的属性
EN

Stack Overflow用户
提问于 2022-03-15 16:15:18
回答 1查看 1.4K关注 0票数 0

嗨,我想从可观察的界面上访问这个属性。

我在这个接口中有两个属性。loan-grade.ts

代码语言:javascript
复制
export interface LoanGrade{
    grade:string
    subgrade: string
}

我使用订阅访问Observable。edit.component.ts

代码语言:javascript
复制
grades: LoanGrade[];
ngOnInit():void{
    this.termGradeServie.termGradeData$.subscribe(grades=>{
     this.grades = grades; 
  })
}

然后,在我的html中,我想打印出我从可观察到的所有分数。但我不能做item.grade。我该怎么做?edit.component.html

代码语言:javascript
复制
<ng-container *ngFor="let item of grades">
   <tr>
       <td><span>{{item.grade}}</span></td> 
   </tr>
</ng-container>

我认为问题在于,当我订阅termGradeData$时,它会返回可观察的( LoanGrade[] ),因此我无法控制自己将this.grades设置为LoanGrade[]。但如果将其设置为LoanGrade[],则无法访问等级或路基的属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-15 16:53:21

在您的服务中,确保用LoanGrade[]类型编写可观察到的内容:

代码语言:javascript
复制
export interface LoanGrade {
    grade: string;
    subgrade: string;
}

@Injectable({ providedIn: 'root' })
export class TermGradeService {
    public termGradeData$: Observable<LoanGrade[]>;
}

在代码中的某个地方,它得到一个值(例如,通过将它连接到一个http.get方法)。

如果您需要自己为它设置一个值,可以使用'BehaviorSubject`‘,如下所示:

代码语言:javascript
复制
export interface LoanGrade {
    grade: string;
    subgrade: string;
}

const initalLoanGradesValue: LoanGrade[] = [];

@Injectable({ providedIn: 'root' })
export class TermGradeService {

    private _termGradeData$: BehaviorSubject<LoanGrade[]> = new BehaviorSubject<LoanGrade[]>(initalLoanGradesValue);

    get termGradeData$() {
        return this._termGradeData$.asObservable();
    }

    // ...
}

然后在代码中的某个地方,确保通过BehaviorSubject发出一个值:

代码语言:javascript
复制
this._termGradeData$.next([
    { grade: 'x1', subgrade: 'y1' },
    { grade: 'x2', subgrade: 'y2' },
    { grade: 'x3', subgrade: 'y3' },
]);

然后,在您的组件中,您可以在下面执行A或B操作:

A

代码语言:javascript
复制
    private termsGradeSub: Subscription;
    public grades: LoanGrade[];
    
    ngOnInit(): void {
        this.termsGradeSub = this.termGradeService.termGradeData$.subscribe((grades) => {
            this.grades = grades; // "pull" the grades out of the observable, and save it to a local variable
        });
    }

    // ...
    ngOnDestroy() {
        this.termsGradeSub?.unsubscribe();
    }

在你的html中:

代码语言:javascript
复制
<ng-container *ngFor="let item of grades">
   <tr>
       <td><span>{{ item.grade }}</span></td> 
   </tr>
</ng-container>

B (读取可观测数据的首选方法):组件内部:

代码语言:javascript
复制
public termGradeData$: Observable<LoanGrade[]>;

ngOnInit() {
    this.termGradeData$ = this.termGradeService.termGradeData$;
} 

并在html中使用async管道:

代码语言:javascript
复制
<ng-container *ngFor="let item of grades | async">
   <tr>
       <td><span>{{ item.grade }}</span></td> 
   </tr>
</ng-container>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71485502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档