You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ui-select的ng-model中绑定对象ID至vm.basePersonelId而非整个对象

解决ui-select绑定选中对象ID而非整个对象的问题

嘿,这个问题我之前也碰到过,ui-select默认会把整个选中对象绑定到ng-model,但要把ID单独存入vm.basePersonelId其实有两种很实用的方法,你可以根据自己的需求来选:

方法一:直接通过repeat语法绑定ID到ng-model

这种方法适合你只需要存储ID,同时又能正常显示人员信息的场景。核心是在ui-select-choices的repeat属性里指定要绑定的值为人员ID:

<ui-select ng-model="vm.basePersonelId" theme="bootstrap">
  <!-- 选中后显示的内容 -->
  <ui-select-match placeholder="请选择人员">{{$select.selected.name}}</ui-select-match>
  
  <!-- 下拉选项列表 -->
  <ui-select-choices repeat="person.id as person in vm.personnelList track by person.id">
    <div ng-bind-html="person.name | highlight: $select.search"></div>
    <small>{{person.department}}</small>
  </ui-select-choices>
</ui-select>

关键解释:

  • repeat="person.id as person in vm.personnelList":这里的person.id就是最终会绑定到vm.basePersonelId的值,而person只是用来渲染下拉选项和选中显示的对象。
  • track by person.id:确保每个选项的唯一性,避免重复渲染或选中异常的问题。

方法二:通过on-select事件手动赋值ID

如果你需要同时保留选中的完整对象(比如要在页面其他地方显示该人员的更多信息),可以用on-select事件来触发ID的赋值:

模板部分:

<ui-select ng-model="vm.selectedPerson" theme="bootstrap" on-select="vm.setPersonelId($item)">
  <ui-select-match placeholder="请选择人员">{{$select.selected.name}}</ui-select-match>
  <ui-select-choices repeat="person in vm.personnelList track by person.id">
    <div ng-bind-html="person.name | highlight: $select.search"></div>
    <small>{{person.department}}</small>
  </ui-select-choices>
</ui-select>

控制器部分:

// 定义触发选中时的方法
vm.setPersonelId = function(selectedPerson) {
  vm.basePersonelId = selectedPerson.id;
};

关键解释:

  • ng-model="vm.selectedPerson":绑定完整的选中对象,方便后续使用人员的其他属性。
  • on-select="vm.setPersonelId($item)":当用户选中某个选项时,$item会传入当前选中的人员对象,在方法里把ID赋值给vm.basePersonelId。

如果是多选场景,只需要把ng-model改成数组:方法一的repeat保持person.id as person ...,vm.basePersonelId就会变成存储多个ID的数组;方法二里的$item会变成选中的对象数组,你可以遍历提取ID存入vm.basePersonelId。

内容的提问来源于stack exchange,提问作者Rasool Ghafari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:55:02