Javascript angularjs ui选择选项下拉列表根据给定的输入按字母顺序排列

Javascript angularjs ui选择选项下拉列表根据给定的输入按字母顺序排列,javascript,jquery,angularjs,angular-ui,angular-ui-select,Javascript,Jquery,Angularjs,Angular Ui,Angular Ui Select,我正在使用的网站,我的工作。目前的代码如下: <ui-select ng-model="model.states"> <ui-select-match placeholder="State"> {{$item.Name}} </ui-select-match> <ui-select-choices repeat="i

我正在使用的网站,我的工作。目前的代码如下:

       <ui-select ng-model="model.states">
         <ui-select-match placeholder="State">
           {{$item.Name}}
         </ui-select-match>
         <ui-select-choices repeat="item.Code as item in statesArray | filter:$select.search">
            {{item.Name}}
         </ui-select-choices>
      </ui-select>
.filter('startsWith', function() {
    return function(array,search) {
        if(!_.isUndefined(array) && !_.isUndefined(search)) {
            var matches = [];
            for (var i = 0; i < array.length; i++) {
                if (array[i].Name.toUpperCase().indexOf(search.toUpperCase()) === 0 &&
                    search.length <= array[i].Name.length) {
                    matches.push(array[i]);
                }
            }
            return matches;
        }
    };
});

{{$item.Name}
{{item.Name}
当我在输入字段中键入任何内容时,例如“a”,ui select choices将显示包含“a”的所有字段(默认情况下)。我想做的是,我想显示所有以“a”开头的状态。如果输入框中未键入任何内容,则按字母顺序显示所有字段。有人能提出一个解决方案吗?我很少看到其他帖子,但还没有人回答这个问题。提前谢谢

例子 下面是一个示例,假设states数组包含加利福尼亚、康涅狄格、阿拉斯加、亚利桑那、纽约等州

如果输入字段中未键入任何内容,则下拉列表应显示阿拉斯加州、亚利桑那州、加利福尼亚州、康涅狄格州、纽约州(可使用orderBy筛选器实现)

如果用户在输入字段中键入“a”,则下拉列表应显示阿拉斯加、亚利桑那州,而不显示其他字段,因为阿拉斯加和亚利桑那州只是以“a”开头的字段。 如果用户输入“c”,下拉列表应显示加利福尼亚州、康涅狄格州。
如果用户键入“ca”,下拉列表应该只显示California,因为它只匹配给定的输入字符串。

如果我理解正确,我想您需要做的就是添加

|orderBy:'Name'


{{item.Name}

查看更多信息

在Tomy和KreepN的帮助下,我挖掘了一点,找到了答案。在这里

   <ui-select ng-model="model.states">
     <ui-select-match placeholder="State">
       {{$item.Name}}
     </ui-select-match>
     <ui-select-choices repeat="item.Code as item in statesArray | startsWith:$select.search | orderBy:'Code'">
        {{item.Name}}
     </ui-select-choices>
   </ui-select>

{{$item.Name}
{{item.Name}
使用过滤器启动的步骤如下:

       <ui-select ng-model="model.states">
         <ui-select-match placeholder="State">
           {{$item.Name}}
         </ui-select-match>
         <ui-select-choices repeat="item.Code as item in statesArray | filter:$select.search">
            {{item.Name}}
         </ui-select-choices>
      </ui-select>
.filter('startsWith', function() {
    return function(array,search) {
        if(!_.isUndefined(array) && !_.isUndefined(search)) {
            var matches = [];
            for (var i = 0; i < array.length; i++) {
                if (array[i].Name.toUpperCase().indexOf(search.toUpperCase()) === 0 &&
                    search.length <= array[i].Name.length) {
                    matches.push(array[i]);
                }
            }
            return matches;
        }
    };
});
.filter('startsWith',function(){
返回函数(数组、搜索){
如果(!\uu0.isUndefined(数组)和&!\u0.isUndefined(搜索)){
var匹配=[];
对于(var i=0;isearch.length我尝试了上述所有选项,但仅在这种情况下才获得了结果。
这对我很有用:

<ui-select-choices repeat="group in groups | filter: $select.search | orderBy:['name']">
  {{ group.name }}
</ui-select-choices>

{{group.name}

是的,这可以按字母顺序对列表进行排序,但无法解决用户在输入字段中键入任何内容时出现的问题。我编辑了这篇文章,以便您更好地理解它。使用Tony的解决方案和自定义过滤器谢谢@KreepN。我可以使用startsWith过滤器使其工作。我有一个问题。您知道我如何通过吗在筛选器的输入字段中键入的文本。我可以使用jquery选择器,如$('input.ui select search').val()但问题是,我使用的是多个ui选择容器,它对第一个容器有效,但对其他容器无效。我想将在ui选择容器中键入的值传递给startsWith筛选器。你知道如何传递吗?$select.search不起作用。From Review:嗨,请不要仅用源代码回答。尝试提供有关解决方案工作原理的详细说明。请参阅:。谢谢