如何使用名称和值(数字ID)填充下拉列表?

时间:2019-08-16 23:09:03

标签: javascript angularjs angular-ui-select

我如何正确地将下拉列表绑定到控制器变量,而是使用下拉列表数组的id属性而不是使用值来分配值,仍然使用数组的name属性为最终用户显示下拉内容选择?

AngularJS工作下拉模板,但没有ID / Value属性

<ui-select ng-model="ctrl.risk.owner" theme="select2" 
           ng-disabled="ctrl.disabled" style="max-width: 150px"
           title="Choose a person">
  <ui-select-match placeholder="Select/Search User">
    {{$select.selected.name}}
  </ui-select-match>
  <ui-select-choices repeat="user in ctrl.users | propsFilter: {name: $select.search}">
      <div value="user.id" ng-bind-html="user.name | highlight: $select.search"></div>
  </ui-select-choices>
</ui-select>

设置阵列(这是select-ui下拉库中需要user.id的地方)

$http.get('api/users').then(function(response){
      if (response.data.Succeeded){     
              for (var key = 0; key < response.data.Result.length; key++){
                    user = response.data.Result[key];     
                    $scope.ctrl.users[user.id] = {name: user.name};
              }
              $scope.ctrl.userDone = true;
              return response.data.Result;
       }
       else{
             $scope.ctrl.msg += "<br />"+ 
             $sce.trustAsHtml(response.data);
       }
}); 

1 个答案:

答案 0 :(得分:2)

ui-select未使用值HTML属性,因此它没有意义。您的选择由您在重复声明中指定的内容表示。

此语句意味着将使用用户进行绑定:

<ui-select-choices repeat="user in ctrl.users | propsFilter: {name: $select.search}">

此语句意味着将使用用户ID进行绑定:

<ui-select-choices repeat="user.id as (id, user) in ctrl.users | propsFilter: {name: $select.search}">

通常,ng-model对象将获得您指示的绑定内容。我认为在ctrl.risk.owner中获取用户没有问题,但是您必须在代码中期望它,然后可以根据需要获取user.id。我认为您正在尝试访问此行中的选定ID:

$scope.ctrl.users[user.id] = {name: user.name};

如果是这样,您应该只为所选用户查看ctrl.risk.owner

播放ui-select提供的示例。我认为这与您最接近的尝试相符:http://plnkr.co/edit/?p=preview