【问题标题】:AngularJS select statement with null value具有空值的AngularJS选择语句
【发布时间】:2015-06-29 09:13:59
【问题描述】:

我需要在 AngularJS 中显示一个包含单个空值选项的选择列表。这是 Angular 控制器的存根:

function BookController($scope) {
    $scope.book = {
        titleId: null
    };

    $scope.titles = [
        {id: null, text: "Book Title <null>"},
        {id: 1,    text: "Book Title #1"},
        {id: 2,    text: "Book Title #2"},
        {id: 3,    text: "Book Title #3"}
    ];
}

这可以按预期工作,但有一个例外,Angular 似乎在列表的头部插入了一个额外的空白“选项”元素:

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

此选项似乎不会对该功能产生不利影响 - 即使用户选择它,选择列表也会选择第一个“真实”选项。有趣的是(?)此选项仅在选择 null 选项时出现,如果选择了 value/non-null 选项,则空白选项消失。

从 UI 的角度来看,我认为这并不理想 - 有谁知道这是什么原因造成的以及是否可以避免?

这里有一个 JSFiddle https://jsfiddle.net/xab21mrr/4/

谢谢。

【问题讨论】:

标签: angularjs


【解决方案1】:

是的,角度添加了一个空选项,您对此无能为力..但根据您的需要,我建议您进行一些重构:

控制器(删除空的第一个对象):

$scope.titles = [
    {id: 1,    text: "Book Title #1"},
    {id: 2,    text: "Book Title #2"},
    {id: 3,    text: "Book Title #3"}
];

模板:

<select ng-model="book.titleId" ng-options="title.id as title.text for title in titles">
    <option value="">Book Title null</option>
</select>

这样,您将拥有“null”选项而不是空选项

编辑:自此错误已修复(感谢 JB Nizet 对此的评论)。不过,您可能需要此重构,因为它是显示与任何服务器数据无关的空/重置选项的标准方式)

【讨论】:

  • 不幸的是,在这种情况下,我无法轻松地对该选项进行硬编码,因为它是基于书籍选择的动态/可选的,即某些标题列表有一个空标题条目,而另一些则没有。我想,我可以用 ng-if 或类似方法将其模板化,但升级到 AngularJS 1.4.1 已经解决了这个问题。
【解决方案2】:
<select ng-model="book.titleId" ng-options="title.id as title.text for title in titles">
  <option value="" disabled selected style="display: none;">Select book</option>
</select>

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多