2016-08-29 117 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

相關問題