여러 비동기 파이프 변수가 있는 *ngIf
두 개의 관찰 가능한 것을 하나로 결합하려고 노력했습니다.*ngIf
및 둘 다 출력된 경우 사용자 인터페이스를 보여줍니다.
테이크:
<div *ngIf="{ language: language$ | async, user: user$ | async } as userLanguage">
<b>{{userLanguage.language}}</b> and <b>{{userLanguage.user}}</b>
</div>
보낸 사람: 하나의 Angular *ngIf 문에 두 개의 비동기 구독 삽입
하지만 제 경우에는 컴파일하는 한 효과가 있습니다.language$
그리고.user$
두 개의 HTTP 요청에서 온 것이고, 그것은 보입니다.user$
다음과 같은 런타임 오류를 던집니다.TypeError: _v.context.ngIf.user is undefined
.
근본적으로 제가 진정으로 원하는 것은 다음과 같습니다(이것은 효과가 없습니다).
<div *ngIf="language$ | async as language && user$ | async as user">
<b>{{language}}</b> and <b>{{user}}</b>
</div>
최선의 솔루션:
- 구성 요소 내부에서 구독하고 변수에 씁니다.
- 성분 내부의 관측 가능한 두 개를 다음과 같이 결합하는 방법
withLatestFrom
- null 검사 추가
{{userLanguage?.user}}
이 조건은 중첩된 상태로 처리해야 합니다.ngIf
지시사항:
<ng-container *ngIf="language$ | async as language">
<div *ngIf="user$ | async as user">
<b>{{language}}</b> and <b>{{user}}</b>
</div>
<ng-container>
단점은 HTTP 요청이 직렬로 수행된다는 것입니다.
그것들을 동시에 수행하고 여전히 하기 위해서.language
그리고.user
변수. 더 많은 내포가 필요합니다.
<ng-container *ngIf="{ language: language$ | async, user: user$ | async } as userLanguage">
<ng-container *ngIf="userLanguage.language as language">
<ng-container *ngIf="userLanguage.user as user">
<div><b>{{language}}</b> and <b>{{user}}</b></div>
</ng-container>
</ng-container>
</ng-container>
이를 위한 더 효율적인 방법은 논리를 이 시점에서 템플릿에서 구성요소 클래스로 이동하고 관찰 가능한 단일 항목을 만드는 것입니다.withLatestFrom
다음과 같은 요령도 사용할 수 있습니다.하나의 중첩이 추가로 필요합니다.
<ng-container *ngIf="{a: stream1$ | async, b: stream2$ | async, c: stream3$ | async} as o">
<ng-container *ngIf="o.a && o.b && o.c">
{{o.a}} {{o.b}} {{o.c}}
</ng-container>
</ng-container>
개체 o는 항상 진실이므로 첫 번째 *ngIf는 스트림 값을 저장하는 데 단순하게 사용됩니다.내부에서 변수 이름을 o로 지정해야 합니다.
그것은 당신이 무엇을 원하는지에 따라 다르지만, 저는 로드된 플래그를 가진 포크 조인 연산자가 좋은 생각일 수 있다고 생각합니다.
https://www.learnrxjs.io/operators/combination/forkjoin.html
forkJoin 모든 Observable이 완료될 때까지 서브스크립션의 값을 반환합니다.
Observable.forkJoin(
Observable.of("my language").delay(1000),
Observable.of("my user").delay(1000),
).subscribe(results => {
this.language = results[0]
this.user = results[1]
})
구독의 onError에 오류를 포착하여 표시할 수 있습니다.
언급URL : https://stackoverflow.com/questions/47391735/ngif-with-multiple-async-pipe-variables
'programing' 카테고리의 다른 글
jquery agax FormData()를 여러 파일과 함께 사용하면서 다중 파트/폼 데이터 요청에 대한 경계를 설정하는 방법 (0) | 2023.08.01 |
---|---|
Sass - 배경 불투명도를 위해 16진수를 RGBa로 변환 (0) | 2023.08.01 |
MySQL 전체 텍스트 검색 관련성을 조작하여 한 필드를 다른 필드보다 '가치 있는' 필드로 만들려면 어떻게 해야 합니까? (0) | 2023.08.01 |
MySQLi 개수(*)는 항상 1을 반환합니다. (0) | 2023.08.01 |
폰트 어썸의 코그 아이콘 색상을 변경할 수 있습니까? (0) | 2023.08.01 |