2017-05-16 3 views
1

각도/타이프 스크립트의 사용자 정의 유효성 검사기 작업 중입니다. 당신이 볼 수 있듯이, 내가 DI하여 다른 구성 요소에서 getNewRestToPay() 메서드를 호출하려고사용자 정의 유효성 검사기 각도 의존성 주입

export class Validator { 
    constructor(private sharedDocument: SharedDocument) { } 

    static amountIsValid(control: FormControl): any { 
     return new Promise(resolve => { 
      setTimeout(() => { 
       console.log(Number.parseInt(control.value), "control.value"); 
       if (Number.parseInt(control.value) >= this.sharedDocument.getNewRestToPay()) { 
        resolve({ 
         "error !": true 
        }); 
       } 
       else { 
        resolve(null); 
       } 
      }, 50); 
     }); 
    } 
} 

: 이것은 내 클래스입니다. 하지만이 구성 요소는 정적 일 수 있습니다. 그것은 나를 오류 표시 : 'sharedDocument'속성 'Validator'유형에 존재하지 않습니다.

정적 구성 요소를 사용하는 경우 구성 요소 측의 메서드를 정적 메서드로 변경해야합니다. 이 경우, 나는 내가 필요로하는 나의 재산을 돌려 줄 수 없다.

@Injectable() 
export class SharedDocument { 
//some code 
getNewRestToPay() :any{ 
     return this.restCaisse; 
    } 
} 

이 문제를 어떻게 해결할 수 있습니까?

+0

'sharedImage : sharedDocument : SharedDocument'를 매개 변수로'amountIsValid '에 전달하지 않으시겠습니까? – Saravana

답변

0

귀하의 발기 검사가 결코 인스턴스화되지 않아 DI가 ​​사용 가능하지 않기 때문에 이것이라고 생각합니다.

또한 생성자를 통하지 않고 종속성 삽입을 만들 수도 있습니다. 이렇게하면 문제가 해결 될 수 있습니다.

그렇게

static amountIsValid(control: FormControl): any { 
      return new Promise(resolve => { 
       setTimeout(() => { 
        console.log(Number.parseInt(control.value), "control.value"); 
        if (Number.parseInt(control.value) >= 
         let injector = ReflectiveInjector.resolveAndCreate([SharedDocument]); 
         let sharedDocument = injector.get(SharedDocument); 
         sharedDocument.getNewRestToPay()) { 
         resolve({ 
          "error !": true 
         }); 
        } 
        else { 
         resolve(null); 
        } 
       }, 50); 
      }); 
     } 

편집과 같은 Reflective Injector

import { ReflectiveInjector } from '@angular/core'; 

변경 당신의 방법을 가져옵니다 그러나 다른 주석이 언급 한 것처럼 - 당신이 정말이 시나리오에 DI를 사용해야합니까? 단순히 SharedDocument 인스턴스를 amountIsValid 메서드에 전달할 수 없습니까?

관련 문제