【问题标题】:angularjs ng-option blank option instead preselectedangularjs ng-option 空白选项改为预选
【发布时间】:2015-12-14 20:40:14
【问题描述】:

我在将预选值显示为我的选择元素中的选定选项时遇到问题。代码来了

<select ng-model="data.company" ng-options="company as company.name for company in companies"></select>


$scope.companies =[{
    id:1,
    name:"Company 1"
},
{
    id:2,
    name:"Company 2"
}];

$scope.data = {
    company:{
        id:2,
        name:"Company 2"
    }
}

问题是,当我进入该部分时,选择会给我一个空白选项,默认情况下会显示“公司 2”。我做错了什么?

【问题讨论】:

  • 试试$scope.data = $scope.companies[1];
  • 这个问题已经在 SO 上回答过无数次了。

标签: javascript angularjs ng-options


【解决方案1】:

在这种情况下,您需要使用track by,因为您将对象值直接分配给ng-model。在这种情况下,当您将对象直接绑定到data.company(ng-model) 跟踪时,通过表达式检查ng-model 中的company.id 以及每个companies 元素id。如果任何一个匹配,它会预先选择该输入。

标记

<select ng-model="data.company" 
   ng-options="company as company.name for company in companies track by company.id">
</select>

Demo Plunkr

【讨论】:

  • 哇,这行得通,你能解释一下为什么没有跟踪它就行不通吗?
  • 如果将公司对象的值设置为 $scope.data = { company: $scope.companies[1] }; 实际上不需要使用 track by在下面查看我对答案的更新
  • @Pankaj Parkar 非常感谢。它正在工作,我学会了通过表达式使用轨道的正确方法
  • @Scott 您是否查看了答案中的角度文档中的链接。??
  • @Scott 基本上在你的 casr 中你没有使用这就是为什么它不需要跟踪..
【解决方案2】:

你可以尝试使用 ng-init

<select ng-init="data.company= companies[0]" 
        ng-model="data.company" 
        ng-options="company as company.name for company in companies"></select>

【讨论】:

    【解决方案3】:

    试试这个

     <select ng-model="data.company" ng-options="company.name for company in companies"></select>
    
      $scope.data = {
          company: $scope.companies[1];
      };
    

    您希望下拉列表中显示的值是公司名称,而存储的对象是公司。

    【讨论】:

    • 仍然无法正常工作,我将照常使用&lt;select ng-model="data.company.id" ng-options="company.ld as company.name for company in companies"&gt;&lt;/select&gt; 我无法以这种方式(第一种方式)弄清楚为什么无法正常工作,因为该对象已正确存储。
    • 是的,这也可以,但是数据库将检索 $scope.data,因此我无法覆盖该内容。我也很欣赏你的回答。也谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2016-07-02
    • 2020-08-28
    • 1970-01-01
    • 2021-11-18
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多