2016-03-08 69 views
0

我搜索谷歌,但無法找到答案......無法讀取未定義(表單驗證)的財產 - angularjs

我有一個md-select,看起來像這樣:

<md-input-container class="md-block" flex-gt-sm> 
    <label>Type</label> 
    <md-select ng-model="f.type" placeholder="Type" select-clear> 
      <md-option ng-repeat="f in ctrl.type" value="{{f}}">{{f}}</md-option> 
    </md-select> 
</md-input-container> 

ctrl.type看起來像這樣在我controller

this.type = ["type1","type2"]; 

,我也送md-select值對象數組是這樣的:

var data = { 
    kind: $scope.f.type, 
}; 

,然後我做了http.post正在發送data對象的API。

現在,這是我的問題。我希望當md-select爲空時,並且用戶發送data對象,而不是得到錯誤Cannot read property 'type' of undefined,即只發送數據但其值爲null而不是undefined,然後當md-select被填充時只需將值發送給api即可。我會怎麼做?我需要做表單驗證嗎?有沒有一個簡單的方法來做到這一點,因爲我必須發送大約10個md-select

謝謝。

+0

根據您發佈的代碼片段,它看起來像是將「Controller as」語法與$ scope混合在一起。我不是一位角度專家,但這甚至有可能嗎? – Lex

回答

1

您可以創建你上面的MD-選擇喜歡的東西

<option value='null'></option> 
<option ng-repeat="f in type" value="{{f}}">{{f}}</option> 

但我認爲一個空/空選項,空元素在browswer因爲你的到來沒有初始化您的f.type。如果你正確地初始化你的f.type,你甚至不會得到那個空元素和它的undefined值。您可以如下所示進行初始化。

<select ng-model='f.type' ng-change='toggleSelection()' ng-init='f.type = type[0]'> 
+0

謝謝,初始化似乎已經奏效。 – Katie

0

嘗試使用ng-options而不是ng-repeat。

例如:

<md-select ng-model="f.type" 
    placeholder="Type" select-clear 
    ng-options="f as f in ctrl.type">  
</md-select> 
相關問題