Angular 角度2-如何使用ngIf获取输入的有效状态

Angular 角度2-如何使用ngIf获取输入的有效状态,angular,forms,angular-forms,Angular,Forms,Angular Forms,我现在正试着对这个问题绞尽脑汁一段时间 当我试图在一个表单中输入一个条件为真时,我收到一个错误,无法从未定义的表单中读取无效的信息 当使用elvis操作符时,我再也看不到错误,但即使输入显示为无效和脏,我仍然看不到错误消息 <form #myForm="ngForm"> ... other inputs ... <input *ngIf="model.type === 'V'" name="price" type="numbe

我现在正试着对这个问题绞尽脑汁一段时间

当我试图在一个表单中输入一个条件为真时,我收到一个错误,无法从未定义的表单中读取无效的信息

当使用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>

... 其他输入。。。
检测到问题

有人提示我缺少什么吗?

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

<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>

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


另一件事是,您唯一需要的验证是,一旦您将此字段弄脏,它将变为有效,除非您删除文本。

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

这实际上是一个范围问题

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

例如,在控制器中:

$scope.newObject = {type: '', price: ''};
然后在ngIf中,您可以绑定和引用已经存在的对象

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

有埃尔维斯操作员吗?或者它只是ignoredI试图在ngIf中使用price&&price.invalid&&price.dirty,这没有帮助yes@Chuvisco,我意识到你想要实现的目标,因此我删除了我的评论,但你已经回复了我的评论,所以看起来你现在在自言自语,很抱歉:D但是是的,我现在明白你的意思了!在使用
[hidden]
而不是
*ngIf
的位置找到,这是本例中的一种解决方法。如果条件不正确,最好不要输入。我也试过了,到目前为止运气都不好。似乎只要我使用一个
*ngIf
价格就不再更新,无论它是在输入上还是在它周围的容器上都没有关系。对于你的第二点,在这个精简的例子中,它只是需要。