2016-04-20 5 views
1

AngularJSリピータのファーストネームの頭文字で人のリストをフィルタリングしようとしています。次のようにAngularJSのファーストネームの人によるフィルタリスト

リピーターは以下のとおりです。

<li ng-repeat="person in people | orderBy: 'firstname' | firstLetter:'firstname':'A'"> 
    <a ui-sref="people.details({ personId: {{person.id}} })"> 
     <span class="list__icon"><img src="img/avatar.png"></span> 
     <span class="list__text"> 
      <span class="list__text__name">{{person.firstname}} <b>{{person.lastname}}</b></span> 
     </span> 
    </a> 
</li> 

だから私は、最初の名前でそれを注文して、カスタムフィルタを使用するには、firstLetterと呼ばれる:

.filter('firstLetter', function() { 
    return function (input, letter) { 
     input = input || []; 
     var out = []; 
     input.forEach(function (item) { 
      if (item.charAt(0).toLowerCase() == letter) { 
       out.push(item); 
      } 
     }); 
     return out; 
    } 
}); 

私はcharAtではないというエラーが発生しますが関数...フィルタにパラメータを間違って渡していますか?

+0

jsfiddleまたはplunkrを作成する –

答えて

2

firstLetterフィルタに追加のパラメータがありません。最初のパラメータinputは、繰り返し実行されている配列(この場合は人)を参照します。 2番目のパラメータletterは、実際にはフィルタ宣言の3番目のパラメータになります。

.filter('firstLetter', function() { 
    return function (input, key, letter) { 
     input = input || []; 
     var out = []; 
     input.forEach(function (item) { 
      console.log('item: ', item[key][0].toLowerCase()); 
      console.log('letter: ', letter); 
      if (item[key][0].toLowerCase() == letter.toLowerCase()) { 
       out.push(item); 
      } 
     }); 
     return out; 
    } 
});; 
2

はいフィルターを間違って渡しています。デフォルトでは、フィルター入力、つまり配列は最初のパラメーターとして渡されます。

.filter('firstLetter', function() { 
    return function (objects, input, letter) { 
     var out = []; 
     angular.forEach(objects,object){ 
      var item = object[input]; 
      if (item.charAt(0).toLowerCase() == letter.toLowerCase()) { 
       out.push(object); 
      } 
     }); 
     return out; 
    } 
}); 
関連する問題