Encuentro los tutoriales de AngularJS difíciles de entender; este me está guiando en la construcción de una aplicación que muestra teléfonos. Estoy en el paso 5 y pensé que, como experimento, trataría de permitir a los usuarios especificar cuántos les gustaría que se les mostrara. La vista se ve así:
<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>
He agregado esta línea donde los usuarios pueden ingresar cuántos resultados desean que se muestren:
How Many: <input ng-model="quantity">
Aquí está mi controlador:
function PhoneListCtrl($scope, $http) {
$http.get('phones/phones.json').success(function(data) {
$scope.phones = data.splice(0, 'quantity');
});
$scope.orderProp = 'age';
$scope.quantity = 5;
}
La línea importante es:
$scope.phones = data.splice(0, 'quantity');
Puedo codificar un número para representar cuántos teléfonos se deben mostrar. Si pongo 5
, se mostrarán 5. Todo lo que quiero hacer es leer el número en esa entrada desde la vista, y ponerlo en la data.splice
línea. He intentado con y sin comillas, y tampoco funciona. ¿Cómo hago esto?
fuente
limitTo
pero proporcionar un botón "cargar más" para aumentar el límite. Esto solo debe mostrarse si hay más registros disponibles.filter:query
?query
proviene deSearch: <input ng-model="query">
Un poco tarde para la fiesta, pero esto funcionó para mí. Esperemos que alguien más lo encuentre útil.
fuente
ng-if="$index < 6"
me permitió mostrar solo los primeros 6 mientras mantenía la matriz completa de búsqueda (tengo un filtro combinado con un campo de búsqueda).ng-if
en este caso, no representará el elemento DOM del repetidor cuyo valor$index
sea mayor que3
. si$index
en el repetidor es0, 1, or 2
, la condición estrue
y se crean los nodos DOM.ng-if
difiereng-hide
en el sentido de que los elementos no se agregan al DOM.almacenar todos sus datos inicialmente
EDITAR accidentalmente colocó el reloj fuera del controlador, debería haber estado dentro.
fuente
aquí hay otra forma de limitar su filtro en html, por ejemplo, quiero mostrar 3 listas a la vez que usaré limitTo: 3
fuente
Esto funciona mejor en mi caso si tiene un objeto o una matriz multidimensional. Solo mostrará los primeros elementos, otros se ignorarán en bucle.
Cambia 5 en lo que quieras.
fuente
Use limitTo filter para mostrar un número limitado de resultados en ng-repeat.
fuente
Otra forma (y creo que mejor) de lograr esto es interceptar los datos. limitTo está bien, pero ¿qué pasa si está limitando a 10 cuando su matriz realmente contiene miles?
Al llamar a mi servicio, simplemente hice esto:
Esto limita lo que se envía a la vista, por lo que debería ser mucho mejor para el rendimiento que hacerlo en el front-end.
fuente
data
, esto no es más eficiente que usar limitTo.