5

我正在尝试解决这个问题一段时间。

当我尝试仅在条件为真时在表单中输入输入时,我收到一个错误,无法从 undefined 读取无效。

使用 elvis 运算符时,我不再收到错误消息,但即使显示输入无效和脏,我仍然看不到错误消息。

<form #myForm="ngForm">
    ... other inputs ...

    <input *ngIf="model.type === 'V'" 
        name="price"
        type="number"
        required
        [(ngModel)]="model.price"
        #price="ngModel">
    <div class="errors" *ngIf="price?.invalid && price?.dirty">
        Problem detected
    </div>
</form>

有人暗示我错过了什么吗?

4

2 回答 2

0

我会做什么,我会将输入和错误包含在第一个条件中:

<form #myForm="ngForm">
   <div *ngIf="model.type === 'V'" >
       <input
           name="price"
           type="number"
           required
           [(ngModel)]="model.price"
           #price="ngModel">
        <div class="errors" *ngIf="price?.invalid && price?.dirty">
           Problem detected
       </div>
    </div>
</form>

这更有意义,因为如果输入根本不存在,您不希望触发错误检查!

另一件事是,您拥有的唯一验证是必需的,因此只要您使该字段变脏,它就会变为有效,除非您删除文本。

于 2016-12-20T12:13:34.293 回答
-1

这里还有一个非常相似的问题:

AngularJS ng-if 和范围

这实际上是范围的问题。

ngIf 创建一个子范围。如果要将子作用域中的输入绑定到其父作用域中的对象,则必须首先创建一个对象以将其绑定到。

例如在您的控制器中:

$scope.newObject = {type: '', price: ''};

然后在 ngIf 内部可以绑定和引用已经存在的对象。

<div ngIf = "newObject.type == 'V'"
     <input type="number" model="newObject.price" />
</div>

但是您不能从子 ngIf 范围在父范围中创建新对象,因此最好在控制器中初始化此对象,以便您可以在子范围中引用它。

于 2017-11-10T20:45:40.693 回答