Ich finde die AngularJS-Tutorials schwer zu verstehen. Dieser führt mich durch die Erstellung einer App, in der Telefone angezeigt werden. Ich bin in Schritt 5 und dachte, ich würde als Experiment versuchen, Benutzern zu ermöglichen, anzugeben, wie viele sie angezeigt werden möchten. Die Ansicht sieht folgendermaßen aus:
<body ng-controller="PhoneListCtrl">
<div class="container-fluid">
<div class="row-fluid">
<div class="span2">
<!--Sidebar content-->
Search: <input ng-model="query">
How Many: <input ng-model="quantity">
Sort by:
<select ng-model="orderProp">
<option value="name">Alphabetical</option>
<option value="age">Newest</option>
</select>
</div>
<div class="span10">
<!--Body content-->
<ul class="phones">
<li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
{{phone.name}}
<p>{{phone.snippet}}</p>
</li>
</ul>
</div>
</div>
</div>
</body>
Ich habe diese Zeile hinzugefügt, in der Benutzer eingeben können, wie viele Ergebnisse angezeigt werden sollen:
How Many: <input ng-model="quantity">
Hier ist mein Controller:
function PhoneListCtrl($scope, $http) {
$http.get('phones/phones.json').success(function(data) {
$scope.phones = data.splice(0, 'quantity');
});
$scope.orderProp = 'age';
$scope.quantity = 5;
}
Die wichtige Zeile lautet:
$scope.phones = data.splice(0, 'quantity');
Ich kann eine Zahl fest codieren, um darzustellen, wie viele Telefone angezeigt werden sollen. Wenn ich einsetze 5
, werden 5 angezeigt. Ich möchte nur die Nummer in dieser Eingabe aus der Ansicht lesen und in die data.splice
Zeile einfügen. Ich habe es mit und ohne Anführungszeichen versucht und keine Arbeit. Wie mache ich das?
quelle
limitTo
einen "Mehr laden" -Button verwenden, um das Limit zu erhöhen. Dies sollte nur angezeigt werden, wenn mehr Datensätze verfügbar sind.filter:query
?query
kommt vonSearch: <input ng-model="query">
Ein bisschen spät zur Party, aber das hat bei mir funktioniert. Hoffentlich findet es jemand anderes nützlich.
quelle
ng-if="$index < 6"
konnte ich nur die ersten 6 anzeigen, während das gesamte Array durchsuchbar blieb (ich habe einen Filter mit einem Suchfeld kombiniert).ng-if
in diesem Fall wird das DOM-Element des Repeaters, dessen$index
größer als ist , nicht gerendert3
. Wenn sich$index
im Repeater befindet0, 1, or 2
, ist die Bedingungtrue
und die DOM-Knoten werden erstellt.ng-if
unterscheidet sich vonng-hide
dem Sinne, dass Elemente nicht zum DOM hinzugefügt werden.Speichern Sie zunächst alle Ihre Daten
EDIT hatte die Uhr versehentlich außerhalb des Controllers platziert, in dem sie sich befinden sollte.
quelle
Hier ist eine andere Möglichkeit, Ihren Filter auf HTML zu beschränken. Ich möchte beispielsweise 3 Listen gleichzeitig anzeigen, als ich limitTo: 3 verwenden werde
quelle
Dies funktioniert in meinem Fall besser, wenn Sie ein Objekt oder ein mehrdimensionales Array haben. Es werden nur die ersten Elemente angezeigt, andere werden in der Schleife einfach ignoriert.
Ändern Sie 5 auf was Sie wollen.
quelle
Verwenden Sie den Filter limitTo, um eine begrenzte Anzahl von Ergebnissen in ng-repeat anzuzeigen.
quelle
Eine andere (und meiner Meinung nach bessere) Möglichkeit, dies zu erreichen, besteht darin, die Daten tatsächlich abzufangen. limitTo ist in Ordnung, aber was ist, wenn Sie auf 10 beschränken, wenn Ihr Array tatsächlich Tausende enthält?
Als ich meinen Dienst anrief, tat ich einfach Folgendes:
Dies schränkt ein, was an die Ansicht gesendet wird, und sollte daher für die Leistung viel besser sein als dies im Front-End zu tun.
quelle
data
around behalten , ist dies nicht effizienter als die Verwendung von limitTo.