【问题标题】:Select not selecting when binding with ng-model and ng-options使用 ng-model 和 ng-options 绑定时选择不选择
【发布时间】:2015-05-06 04:36:05
【问题描述】:

这是我的选择:

<select class="form-control" ng-options="assistanceType as assistanceType.name for assistanceType in assistanceTypes" ng-model="selectedRecord.assistanceType"></select>

这是我用来加载协助类型的内容:

$scope.getAssistanceTypes = function () {
    $http.get('/api/assistanceType/getAll').
    success(function (data, status, headers, config) {
        $scope.assistanceTypes = data;
    }).
    error(function (data, status, headers, config) {
        alert(data.ExceptionMessage);
    });
}

结果如下:

    [
  {
    "assistanceTypeId": 1,
    "name": "Essay"
  },
  {
    "assistanceTypeId": 2,
    "name": "Resume"
  },
  {
    "assistanceTypeId": 3,
    "name": "Test"
  }
]

一切正常,当我更改选项时,我可以看到模型正在更新。

但是当我加载记录($scope.selectedRecord)时,选择的选项没有反映assistanceType对象!

这里是“selectedRecord”:

{
  "recordId": 1,
  "student": {
    "id": "xxx",
    "firstName": "xxx",
    "lastName": "xxx"
  },
  "createDate": "2015-03-04T15:35:40",
  "closeDate": "2015-03-04T15:35:40",
  "checkInDate": "2015-03-04T15:35:40",
  "checkOutDate": "2015-03-04T15:35:40",
  "consultant": {
    "id": "xxx",
    "firstName": "xxx",
    "lastName": "xxx"
  },
  "assistanceType": {
    "assistanceTypeId": 1,
    "name": "Essay"
  },
  "course": {
    "course": "xxx",
    "name": "xxx",
    "teacher": {
      "id": "xxx",
      "firstName": "xxx",
      "lastName": "xxx"
    }
  },
  "format": null,
  "classStanding": null,
  "comment": "Nothing here!"
}

我是 AngularJS 的新手,我很可能会在这里遗漏一些东西。但在我看来,在我加载主记录的那一刻,选择应该填充 selectedRecord.assistanceType 中的对象。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: javascript angularjs select angular-ngmodel ng-options


    【解决方案1】:

    选择元素需要名称属性来获取模型元素选择,在您的情况下只需添加添加名称属性。例如名称="assistanceType"。直到需要时才需要添加轨道。

    【讨论】:

      【解决方案2】:

      问题在于 selectedRecord 中的“assistanceType”对象与assistanceTypes 数组中的等价对象并不完全相同。 试试这个:

      <select class="form-control" ng-options="assistanceType as assistanceType.name for assistanceType in assistanceTypes track by assistanceType.name" ng-model="selectedRecord.assistanceType"></select>
      

      请注意,我添加了“track by assistantType.name”,以便按名称而不是对象的 $$hashkey 比较它们。

      【讨论】: