AngularJS select创建值为“?object:null?”的选项。并且在绑定为null时不使用空的默认选项

时间:2014-05-14 00:22:10

标签: angularjs

这是代码的样子

<select ng-model="nullableInt">
  <option></option>
  <option value="0">First option</option>
  <option value="1">First option</option>
  <option value="2">First option</option>
</select>

当nullableInt为null时,生成的html为

<select ng-model="nullableInt">
  <option></option>
  <option value="? object:null ?"></option>
  <option value="0">First option</option>
  <option value="1">First option</option>
  <option value="2">First option</option>
</select>

在这里的plunkr中重现:http://plnkr.co/edit/05pBEMJppmkrn3nFgYdk?p=info

值得一提的是,我试图避免使用ng-options,为AngularJS创建一个端点来消耗一些实际上不会经常变化的数据(如果有的话)似乎有些过分。

4 个答案:

答案 0 :(得分:17)

2017年3月29日更新:

正如Jorge Rodrigues dos Santos所说,对于较新版本的角度,这应该以不同的方式处理。以下是角度1.6.3

的当前文档
  

可选地,单个硬编码元素,设置值   到一个空字符串,可以嵌套到元素中。这个   然后,element将表示null或“not selected”选项。看到   示例如下。

https://docs.angularjs.org/api/ng/directive/select


Angular正在创建一个表示空值的新选项。它没有找到您在HTML中提供的选项之一。

要绑定到null,请在第一个选项

上设置value =“null”
<option value="null"></option>

http://plnkr.co/edit/kzPVu4hiMcP6wA6crGYt?p=preview

答案 1 :(得分:1)

接受的答案对我不起作用,因为我的属性可能是空白,空或未定义。如果您使用的是版本1.3+,则可以使用getterSetter将值强制为空白。

我正在处理字符串值。您还必须在函数中处理0或其他有效的假值。

$scope.nullableIntCoerced = function(n) {
    return arguments.length ? ($scope.nullableInt = n) : ($scope.nullableInt || "");
}

<select ng-model="nullableIntCoerced" ng-model-options="{getterSetter:true}">
    <option value=""></option>
    ...

https://code.angularjs.org/1.3.20/docs/api/ng/directive/ngModel

答案 2 :(得分:1)

对于更新版本的Angularjs,使用<div id="squares"> <div id="div1"></div> <div id="div2"></div> <div id="div3"></div> </div> <div id="button"> <button>Click me!</button> </div>作为空值

答案 3 :(得分:0)

以下解决方案为我解决了问题。

这里的问题是当使用ng-model时,它会添加一个值为“?”的默认选项。如果不使用ng-model,则无法使用ng-change来获取当前选择。我实际创建了一个onChangeSelection(),我们可以在其中设置下面的defaultSelected属性

$scope.onChangeSelection = function(id) {

    document.getElementById(id)[0].defaultSelected = true;
    $scope.selected = $('#'+id).val();
}

<select id="mySelect" ng-model="nullableInt" ng-options="option.value as option.text for option in arrayContents track by option.value"                    ng-change="{{onChangeSelection(id)}}" required>
    <option value="" ng-if="false"></option>
</select>

这将从选项列表中排除默认选项,并将第一个值设为defaultSelected。