无法读取未定义的属性(表单验证) - angularjs

时间:2016-03-08 17:07:12

标签: javascript angularjs

我搜索了Google,但无法找到答案......

我有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.typecontroller

中看起来像这样
this.type = ["type1","type2"];

我也将md-select值发送到对象数组,如下所示:

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

然后我正在执行将http.post对象发送到api的data

现在这是我的问题。我希望当md-select为空时,用户发送data对象,而不是获取错误Cannot read property 'type' of undefined,而只是发送数据但其值为{ {1}}代替null,然后在填充undefined时,它只是将值发送到api。我该怎么办?我需要进行表单验证吗?有没有一种简单的方法可以做到这一点,因为我必须发送大约10个md-select

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用类似

之类的内容在md-option上创建一个空/虚拟选项
<option value='null'></option>
<option ng-repeat="f in type" value="{{f}}">{{f}}</option>

但是我认为,因为你没有初始化你的f.type,所以空元素会进入浏览器。如果您正确初始化f.type,则甚至不会获得该空元素及其undefined值。您可以按如下所示初始化。

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

答案 1 :(得分: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>