Angular JS多选选项添加额外的?选项

时间:2014-12-08 14:03:07

标签: javascript angularjs

我正在填充我的多个选择:

<select ng-model="myAddress" ng-options="address.addressLines for address in search.result.addresses" >
</select>

目前有2件物品。但是当我加载页面时,它似乎添加了一个额外的空白行

<option value="?" selected="selected" label=""></option>

但是当我点击我的实际2项行时,上面的错误行就会消失。知道是什么导致了这个吗?

1 个答案:

答案 0 :(得分:1)

当select最初加载到视图中时,不会从控制器设置模型(myAddress)。 Angular需要一种表示方式,因此它会在选择框中添加一个空选项。一旦做出选择,它就会被填充并删除空选项,因为它没有在绑定到选择的列表中定义。

如果您不想显示空白选项,则需要在控制器中设置一个有效的$ scope.myAddress作为默认选项。

根据您想要完成的内容,实际上有三种选择。

  1. 现在可以保留它,因为在选择之前有空选项可用。
  2. 在控制器中设置初始值,这样就不会有空选项。
  3. 即使已将值设置为选择,也始终有一个空选项。
  4. 示例here

    HTML:

    <div ng-app="myApp" ng-controller="MainController">
        Select with no value set in controller:<br />
        <select ng-model="select1" ng-options="item.name for item in items">
        </select> {{select1}}
        <br /><br />
            Select with value set in controller:<br />
        <select ng-model="select2" ng-options="item.name for item in items">
        </select> {{select2}}
        <br /><br />
            Select empty option always available (even after selection):<br />
        <select ng-model="select3" ng-options="item.name for item in items">
            <option value=""></option>
        </select> {{select3}}
    </div>
    

    使用Javascript:

    angular.module("myApp", [])
    
    .controller("MainController", function ($scope) {
        $scope.items = [
            {id: 1, name: "Item 1"},
            {id: 2, name: "Item 2"},
            {id: 3, name: "Item 3"},
            {id: 4, name: "Item 4"}
        ];
    
        //initial value for select2
        $scope.select2 = $scope.items[0];    
    });