2017-05-11 1 views
2

사용자가 입력 필드에 입력 할 때 숫자 이외의 모든 문자를 빈 문자열로 바꿔야합니다. 불행히도 ngModel이 변경되었음을 감지하지 못하고 다시 숫자가 입력되면 balanceAmount 변수 만 업데이트합니다. ngModel이 변경되어 업데이트되어야한다고 Angular에게 알릴 수 있습니까?NgModel 변경된 문자를 빈 문자열로 바꿀 때 변경되지 않음

HTML :

<input [ngModel]="balanceAmount" (ngModelChange)="onBalanceChange($event)" /> 

타이프 :

onBalanceChange(amount) { 
    amount = amount.replace(/[^0-9\.]+/g, ''); 
    this.balanceAmount = amount; 
} 
+2

당신이 묻고있는 것이 100 % 확실한 것은 아니지만 빈 문자열은'' ''이 아니라''undefined' '입니다. 또한'string' 연산을 수행 한 다음'integer' 연산과 비교를 시도합니다. 여러분의'string'과'0'을 비교하는 것이 합리적이라 할지라도, if 문은 결코 사실이 아닙니다. 왜냐하면 당신이 숫자를 음수가 될 수 없게 만드는'-' 기호를 포함한 비 숫자를 대체하기 때문입니다. 이 모든 기능에는 결함이 있고 불필요합니다. – Claies

+0

* 정말로 * 사용자 입력을 숫자로 제한하려는 경우 입력에'type = "number"'를 사용해야합니다. 단 한가지주의 할 점은 숫자가 음수 일 수 있고 'e'(지수 숫자를 나타냄)가 허용 될 수 있다는 것입니다. – Claies

+0

필자의 요점을 명확히하기 위해 제 질문을 업데이트했습니다. 당신이 말하는 함수와 if 문은 제 질문의 일부가 아닙니다. – maidi

답변

2

확인 사용자 유형 숫자 만 (음수 값을 허용하지 않는) 만들려면 :처럼 @Claies 말했다

<input type="number" min="0"> 

는 더 을 사용하여 기능을 사용하므로 바퀴을 재발 명하지 마십시오.

변경 사항을 감지하려면 DoCheck()을 사용할 수 있습니다. 예 : 그런데

export class myClass implements OnInit, DoCheck { 
    private myModel: any; 

    constructor() { 
    } 

    ngOnInit() { 
    } 

    ngDoCheck() { 
     // Do whatever checks and controls on your model 
     console.log('The listener listens to: ' + JSON.stringify(this.myModel)); 
     if (this.myModel.length > 0 || !this.myModel) { 
      // Do something 
     } 
    } 
} 

, 나는이 if 내부했던 컨트롤은 데모 완전히 무작위입니다.