2017-11-17 3 views
0

나는이 같은 것을 보면 내 모든 각도 응용 프로그램 전체 기간이 있습니다변경 감지 함수를 호출 너무 많이

{{ stringAsDate(entry.followUpDate) | date:"yMdjm" }} 

stringAsDate 기능이 보이는을 같은 :

stringAsDate(dateStr: any) { 
    if(dateStr != null){ 
     return new Date(moment(dateStr).seconds(0).milliseconds(0).toISOString()); 
    } 
} 

stringAsDate() 함수는 모든 브라우저에서 같은 날짜를 가져야합니다. (다른 브라우저에서는 새 Date()를 다르게 평가하기 때문에 불일치가 발생했습니다.) 어쨌든이 방법이 효과적입니다. 그러나 stringAsDate()는 모든 변경 감지 (모든 클릭 등)를 호출하므로 응용 프로그램의 성능이 정말 좋지 않습니다.

stringAsDate()가 여러 번 호출되는 것을 피할 수있는 방법이 있습니까? Angular4에서

+0

템플릿과 같은 함수를 호출하지 않는 것이 좋습니다. 이 변수를 템플릿에 전달하기 전에 구성 요소에서이 작업을 수행하거나 순수한 '파이프'를 만들 수 있습니다. Btw, 이것은'* ngFor' 안에 있습니까? – developer033

+0

[OnPush] (https://angular-2-training-book.rangle.io/handout/change-detection/change_detection_strategy_onpush.html) 변경 감지 전략을 살펴 보았습니까? 그것은 성능을 향상 시키기로되어 있지만 조심스럽게 구현해야합니다. 약간 위험한 영역입니다. OnPush 전략을 사용하면 변경 감지가 실행되는시기와 위치, 변경 사항을 확인해야하는 구성 요소에 대한 권한을 부여 할 수 있습니다. – Andresson

답변

0

는 (괄호 내) 속성으로 템플릿에 해당 기능을 참조 할 수 있습니다, 그래서 그 이름 앞에 함수 선언에서 키워드를 얻을 을 넣어.

+0

그런 다음 오류 "A '가져 오기'접근 자 매개 변수를 가질 수 없습니다." –

+0

@KevinQuiring, 그렇다면 리팩토링을 제안 할 것입니다. dateStr 매개 변수를 구성 요소 클래스로 이동하고 구성 요소를 생성하거나 ngOnInit 메서드에서 한 번 초기화 할 수 있습니까? –

관련 문제