允许在ui-select中手动输入文本

Ale*_*erz 31 angularjs ui-select

我正在使用ui-select的选择框.一切正常,但我想允许手动输入文本,并且不希望限制用户使用列表中的可用值.如果我输入文本,它会正确过滤我的列表.但是,当我没有点击一个元素并继续前进到下一个字段时,我的文本将被丢弃.

有任何想法吗?

谢谢和问候,亚历克斯

我不想显示我的代码因为我认为它不正确,但它被要求:

<ui-select ng-model="formData[field.id].selected" theme="bootstrap">
    <ui-select-match placeholder="{{ lists[field.id].placeholder }}">{{$select.selected.text}}</ui-select-match>
    <ui-select-choices repeat="item in lists[field.id].list | filter: $select.search">
        <div ng-bind-html="item.text | highlight: $select.search"></div>
    </ui-select-choices>
</ui-select>
Run Code Online (Sandbox Code Playgroud)

数据存储在formData[field.id].selected.field.id是要显示的当前字段的编号(我动态生成表单).假设它存储一个唯一的int值.

编辑08.04.2015 我的解决方案: 我发现似乎没有相当于C#组合框.所以我继续使用了两个不同的领域.这不是我想要的,但它现在有效:

<ui-select ng-model="formData[field.id].selected" theme="bootstrap">
    <ui-select-match placeholder="{{ lists[field.id].placeholder }}">{{$select.selected.text}}</ui-select-match>
    <ui-select-choices repeat="item in lists[field.id].list | filter: $select.search">
        <div ng-bind-html="item.text | highlight: $select.search"></div>
    </ui-select-choices>
</ui-select>
<?php echo __('Create a new element if value is not in list'); ?>
<div class="input-group">
    <span class="input-group-addon">
        <input type="checkbox" ng-model="disabled[field.id]">
    </span>
    <input type="text" value="" ng-disabled="!disabled[field.id]" class="form-control" ng-model="formData[field.id].newValue" />
</div>
Run Code Online (Sandbox Code Playgroud)

sil*_*Arc 43

这是一个解决方案:

HTML -

<ui-select ng-model="superhero.selected">
  <ui-select-match placeholder="Select or search a superhero ...">{{$select.selected}}</ui-select-match>
  <ui-select-choices repeat="hero in getSuperheroes($select.search) | filter: $select.search">
    <div ng-bind="hero"></div>
  </ui-select-choices>
</ui-select>
Run Code Online (Sandbox Code Playgroud)

控制器 -

$scope.getSuperheroes = function(search) {
 var newSupes = $scope.superheroes.slice();
  if (search && newSupes.indexOf(search) === -1) {
    newSupes.unshift(search);
  }
  return newSupes;
}
Run Code Online (Sandbox Code Playgroud)

这是CodePen解决方案.


Pau*_*amp 13

我想我找到了一种允许用户创建新条目的方法.使用"on-select"属性传递一个以$ select作为参数的函数,如下所示:

<ui-select ng-model="person.selected"
      theme="select2"
      on-select="peopleSel($select)"
      tagging
      reset-search-input="false"
      >

    <ui-select-match placeholder="Enter a name...">{{$select.selected.name}}</ui-select-match>
    <ui-select-choices repeat="sel in people | filter: {name: $select.search}">
    <div ng-bind-html="sel.name | highlight: $select.search"></div>
    </ui-select-choices>
  </ui-select>
Run Code Online (Sandbox Code Playgroud)

然后创建在clickTriggeredSelect变量为false时添加新条目的函数:

$scope.peopleSel= function(sel) {
  if ( sel.search && ! sel.clickTriggeredSelect ) {
    if ( ! sel.selected || sel.selected.name != sel.search ) {
      //Search for an existing entry for the given name
      var newOne= personSearch( sel.search ); 
      if ( newOne === null ) {
        //Create a new entry since one does not exist
        newOne= { name: sel.search, email: 'none', country: 'unknown' };
        $scope.people.push( newOne );
      }
      //Make the found or created entry the selected one
      sel.selected= newOne;
    }
  }
  sel.search= ''; //optional clearing of search pattern
};
Run Code Online (Sandbox Code Playgroud)

请注意,此处未提供personSearch定义.此外,这种测试clickTriggeredSelect的方法可用于允许用户取消选择该字段(如果空白条目是首选项).

PVC


rav*_*ave 8

您可以使用标记属性,如文档中所述:https: //github.com/angular-ui/ui-select/wiki/ui-select

<ui-select multiple tagging tagging-label="(custom 'new' label)" ng-model="multipleDemo.colors">
...
</ui-select>
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您将我指向Wiki。我在搜索文档或示例,但完全错过了Wiki。标记不是我所需要的。标记仅在使用`multiple`时有效。我想要一个选择项,就像一个选择项和一个文本输入项。如果您的文本已经在列表中,则可以单击它,否则,将存储您的文本。 (2认同)
  • 根据“angular-ui”的官方示例,“标记”不适用于单选。它仅适用于[官方 Angular UI Github 示例](https://github.com/angular-ui/ui-select/blob/master/docs/examples/demo-tagging.html) 的多个链接 (2认同)