วิธีทำให้ orderby filter ทำงานกับอาร์เรย์ของสตริงได้อย่างไร


86

นี่คือรหัสที่ใช้งานไม่ได้: สาธิต: http://jsfiddle.net/8dt94/63/

<div ng-controller="MyCtrl">    
    <input type="text" ng-model="searchText" />
  <ul ng-repeat="strVal in arrVal|orderBy|filter:searchText" >
      <li>{{strVal}}</li>
  </ul>
</div>

var app=angular.module('myApp', []);
app.controller('MyCtrl', function ($scope,$filter) {
  $scope.arrVal = ['one','two','three','four','five','six'];  
});

ฉันไม่เชื่อว่าคุณควรใช้ค่าดั้งเดิมในอาร์เรย์ ng-repeat ของคุณ ถ้าไม่ได้ผล ( jsfiddle.net/EGVwG )
Tosh

คำถามนี้ยังคงใช้กับ ng-options attr ของ select ซึ่งจะต้องเป็นรายการสตริง
รถไฟสเปน

คำตอบ:


248

คุณสามารถสั่งซื้อด้วยวิธีการเพื่อให้คุณสามารถใช้เมธอด toString

<ul ng-repeat="strVal in arrVal | orderBy:'toString()' | filter:searchText">

+1. นอกจากนี้คุณสามารถเพิ่ม "track by" ต่อท้าย: <ul ng-repeat = "strVal ใน arrVal | orderBy: 'toString ()' | filter: searchText track by $ index">
Amy

9
ทางออกที่ดีฉันต้องการอาร์เรย์ของตัวเลขที่เรียงแบบนี้[2,5,3,1,6, 33]ดังนั้นtoString()ฉันจึงใช้ f แทนvalueOf()และมันก็ทำงานได้อย่างสมบูรณ์แบบ ขอบคุณสำหรับการแก้ปัญหา
ug_

สิ่งนี้ได้ผลสำหรับฉันเช่นกัน! มีความคิดว่าทำไมเคล็ดลับนี้ถึงใช้ได้ผล?
elethan

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.