2016-08-17 16 views
1

私が取り組んでいるウェブサイトにhttps://github.com/angular-ui/ui-selectを使用しています。次のように現在のコードは次のとおりです。angularjs ui-select-choicesドロップダウン入力に応じてアルファベット順に表示

 <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> 

私は入力フィールドに何も入力し、例えば「A」、UI選択 - 選択肢は(デフォルトでは)「A」を含むすべてのフィールドを示します。私がしたいことは、 "a"で始まるすべての状態を表示することです。入力ボックスに何も入力されていない場合は、すべてのフィールドをアルファベット順に表示します。誰かが解決策を提案できますか?私は他のいくつかの投稿を見ましたが、誰もこの質問にまだ答えませんでした。前もって感謝します。

例は、ここでの例だとしよう状態配列はカリフォルニア、コネチカット、アラスカ州、アリゾナ州、ニューヨークのような状態があります。

入力フィールドに何も入力されていない場合は、Alaska、Arizona、California、Connecticut、New Yorkが表示されます(orderByフィルターを使用して実現できます)。

ユーザーが入力フィールドに「a」と入力すると、Alaska、Arizonaが表示され、AlaskaとArizonaは「a」で始まるフィールドしか表示されません。 ユーザーが「c」を入力した場合、ドロップダウンにはカリフォルニア州コネチカット州が表示されます。 ユーザーが「ca」と入力すると、指定された入力文字列にのみ一致するので、ドロップダウンでカリフォルニアのみが表示されます。

+0

利用トニーのソリューションhttps://github.com/michaelbromley/angularUtils/blob/master/src/filters/:ここでは、次のように

<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> 

のstartsWithフィルターがあり、ありますstartsWith/startsWith.js – KreepN

+0

ありがとう@KreepN。私は、startsWithフィルターを使って動作させることができました。私には1つの質問があった。入力フィールドに入力されたテキストをフィルタに渡す方法を知っていますか?私は$( 'input.ui-select-search')のようなjqueryセレクタを使うことができますが、val()でも問題は、複数のui-selectコンテナを使用しています。他の容器の場合。私は、ui-selectコンテナに入力された値をstartsWithフィルタに渡したいと思います。どうすればいいの? $ select.searchは機能しません。 – Swap

答えて

6

私が正しくあなたを理解していれば、私はあなたがする必要があるすべては

を追加だと思います| ORDERBY:「名前」

<ui-select-choices repeat="item.Code as item in statesArray | filter:$select.search | orderBy:'Name'"> 
{{item.Name}} 
</ui-select-choices> 

が少しとトミーさんとKreepNの助けを借りてを掘りした後の詳細

+0

ええ、これはアルファベット順にリストをソートするために機能しますが、ユーザーが入力フィールドに何かを入力しても問題は解決しません。私はあなたがそれをよりよく理解できるように、投稿を編集しました。 – Swap

1

ためorderByをチェックアウト、私は答えを見つけました。カスタムフィルタと

.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; 
     } 
    }; 
}); 
関連する問題