Angularjs UI 初始选择多选

Angularjs UI multiselect with initial selection

我正在使用 Angularjs UI select。我遇到了问题。

这是我的代码:

Javascript:

$scope.user.SelectedCategories
$scope.Categories= [
  { value: 'Reading', name: 'Reading Books',Id : 4 },
  { value: 'Sports', name: 'Physical Activity',Id : 9 },
  { value: 'Movies', name: 'Entertainment',Id : 7 },
  { value: 'Video Games', name: 'Passion',Id : 11 }
];

HTML:

<div class="input-group">
      <ui-select multiple ng-model="user.SelectedCategories" theme="bootstrap" sortable="true" close-on-select="false" style="width: 350px;">
      <ui-select-match placeholder="Select Categories...">{{$item.Value}}</ui-select-match>
      <ui-select-choices repeat="category.Id as category in  Categories">{{category.Value}}
      </ui-select-choices>
</div>

现在如何将 selected 类别显示为页面上的 selected 类别 reload.Selected 类别将保存在数据库中,并且在页面重新加载时它们将在客户端可用但是我怎样才能将它们显示为 selected 并且它们也不得出现在下拉列表中。

编辑 nicost 的建议解决了我一半的问题,即将从数据库中获取的 selected 类别分配给 $scope.SelectedCategories,但剩下的问题是这些类别也出现在下拉列表中。

ui multiselect 的默认行为是,如果我 select 下拉列表中的一个类别,它会在上面的文本框中显示为 selected 并且类别从下拉列表中删除,当我从 selected 类别中删除任何类别时,该类别出现在下拉列表中。

在我的例子中,如果我在页面重新加载时从可用类别列表中删除 selected 类别(我在服务器端这样做),那么它们不会出现在下拉列表中,但是当我删除任何 selected 类别未出现在下拉列表中的类别。

要防止在下拉列表中显示所选类别,您必须过滤其中的值。您可以使用自定义过滤器执行此操作:

<ui-select-choices  repeat="category in categories | filter: $select.search |filter:customFilter track by category.Id">

我为你创建了一个plunker。 希望对您有所帮助。