2017-11-08 18 views
0

Ionic 3 앱 (Angular4를 사용)의 * ngFor 루프 반복마다 두 번 호출되는 유틸리티 메소드가 있습니다. (아래 getIndex와 비슷한).내부 변수에 대한 Angular2 + 템플릿 구문 * ngFor

로컬 변수와 참조를 할당하는 방법이 있습니까? 따라서 유틸리티 메소드가 반복마다 두 번 호출되지 않습니까? 형태의

뭔가 :

<div *ngfor="let item of items; 
      let i = index; 
      let j = getIndex2(items[i]); 
      let k = items[j]"> 
    {{k.property1}} 
    {{k.property2}} 
</div> 

너무 as, 또는 # 구문을 사용할 수 있지만 가능하다면 알고 좋을 것이다.

답변

0

참고하십시오 무엇 getIndex2()는 않지만, 당신은 단지 현재 항목을 참조 할 경우, 당신이 할 필요가있다 :

<div *ngfor="let item of items"> 
    {{ item.property1 }} 
    {{ item.property2 }} 
</div> 

그러나 나는 경우가 가정합니다. 그렇지 않으면 템플릿 마크 업 외부에서 로직을 처리해야합니다. 다음

this.items = this.items.map((item) => item.otherItem = this.getIndex2(item)); 

그리고 : : 예를 들어 나에게 이미 인식하지 무언가를 말하지 않는

<div *ngfor="let item of items"> 
    {{ item.otherItem.property1 }} 
    {{ item.otherItem.property2 }} 
</div> 
+0

. 유틸리티 메소드에 대한 호출은 다시 계산할 필요가 없습니다. – JGFMK

+1

코드를 리팩토링해야합니다. 유효하지 않습니다. '* ngFor'- 지시어는 index, first, last, even의 4 가지 변수를 취합니다. 그게 전부 야. 당신이해야 할 일은 당신의 논리를 컴포넌트 클래스 (또는 서비스)에 넣는 것입니다. – unitario

+0

루프 안에 메서드 호출의 결과를 저장하는 방법이 있어야합니다. 그래서 두 번 이상 필요로 할 때 한 번만 호출됩니다 ... 그래서 계산은 한 번 발생합니다. 일종의 게으른 로딩 캐싱 utllity 메소드는 다른 대안이 될 수 있습니다.하지만 stateful 코드를 작성하는 것은 다소 피할 수 있습니다. – JGFMK