Ну, inValid
- это одна логическая переменная, и вы ожидаете, что она будет содержать достоверность для каждого применимого поля.
Либо создайте отдельную переменную для каждого поля, либо создайте метод, который проверяет достоверность для каждого поля. Давайте go со вторым подходом:
Итак, ваш HTML код должен выглядеть так (обновите директиву *ngIf
):
<div *ngFor="p of data; let i = index">
<label>p.name{{i}}</label>
<input type="text" class="form-control" name="p.name{{i}}" (change)="limitUser($event)" [(ngModel)]="p.usage" id="p.name">
<div class="danger" *ngIf="isInvalid(i)">
Please enter number smaller than 10
</div>
</div>
И добавьте новый метод в свой TS, а также изменить limitUser()
:
isInvalid(index) {
return this.data[index].usage > 10;
}
limitUser(event) {
for (let i = 0; i < this.data.length; i ++) {
// btw, use === to compare; == means loosely compare and = means assign
// or just append ! to check for falsy values, like:
if (!this.data[i].usage){
this.data[i].usage = 0;
}
}
}
Вы можете повторно использовать свою переменную inValid
, чтобы проверить общую действительность формы, или просто удалить ее.
ОБНОВЛЕНИЕ:
Чтобы отключить кнопку отправки, когда все отключено:
Измените кнопку отправки, чтобы включить атрибут [disabled]
в HTML:
...
<button type="submit" [disabled]="isFormInvalid">
...
И в ТС:
get isFormInvalid() {
return this.data.some(datum => datum.usage > 10);
}