2016-08-29 121 views
16

我有以下的textarea:类型错误:无法读取属性的“有效”未定义

<textarea class="form-control" [(ngModel)]="content" name="content" required> 
     </textarea> 

及以下提交按钮:

<button type="submit" class="btn btn-default" [disabled]="content.valid">New comment</button> 

正如我在角2形式指南中看到(https://angular.io/docs/ts/latest/guide/forms.html )我可以使用x.valid来检查它是否不为空。

为什么我会收到TypeError: Cannot read property 'valid' of undefined错误?

+4

我想你错过了这一点: '#NAME = “ngModel”'。在你的情况:#content =“ngModel” – michael

+0

其实我得到相同的错误 – TheUnreal

回答

23

在你的情况下内容是你的模型属性。

为了做到你需要你想要使用template reference value的形式控制#myControl =“ngModel”,然后你有机会获得有效的财产:myControl.valid

所以在你的例子:

<textarea class="form-control" [(ngModel)]="content" 
      name="content" required #myControl="ngModel"> 
</textarea> 

而在按钮标签使用它:

<button type="submit" class="btn btn-default" 
[disabled]="myControl.valid">New comment</button> 
+0

谢谢!我如何在我的'ngSubmit()'中发送'content'?我的表单被分配了'但我不知道如何用这种方式获得内容值 – TheUnreal

+0

如果你在控件上使用ngModel,所有东西都绑定到你的模型上,所以你可以使用它。如果你需要更多的表单,你可以在文档中进行操作,并获取表单自身的参考文档'#heroForm =“ngForm”',然后使用它。 –

+0

我不明白的是如何在组件(.ts文件)中使用'content'的值?我是否需要将它作为参数传递,或者我可以用另一种方式在组件中使用它? – TheUnreal

2
<div class="form-group"> 
    <label for="inputEmail" class="col-lg-2 control-label">Email</label> 
    <div class="col-lg-10"> 
     <input type="text" class="form-control" id="name" placeholder="Name" minlength="4" maxlength="24" [(ngModel)]="name" name="email" #myName="ngModel" required> 
      <div *ngIf="myName.errors && (myName.dirty || myName.touched)" class="alert alert-danger"> 
       <div [hidden]="!myName.errors.required"> 
        Name is required 
       </div> 
       <div [hidden]="!myName.errors.minlength"> 
        Name must be at least 4 characters long. 
       </div> 
       <div [hidden]="!myName.errors.maxlength"> 
        Name cannot be more than 24 characters long. 
       </div> 
      </div> 
    </div> 
</div> 
+1

给一个人一条鱼,他吃了一天... – Lurk21

相关问题