Pensé que esto sería algo muy común, pero no pude encontrar cómo manejarlo en AngularJS. Digamos que tengo una lista de eventos y quiero generarlos con AngularJS, entonces eso es bastante fácil:
<ul>
<li ng-repeat="event in events">{{event.title}}</li>
</ul>
Pero, ¿cómo manejo el caso cuando la lista está vacía? Quiero tener un cuadro de mensaje en el lugar donde está la lista con algo como "Sin eventos" o similar. Lo único que se acercaría es ng-switchcon events.length(¿cómo verifico si está vacío cuando hay un objeto y no una matriz?), Pero ¿es realmente la única opción que tengo?

Respuestas:
Puedes usar ngShow .
Ver ejemplo .
O puedes usar ngHide
Ver ejemplo .
Para el objeto, puede probar Object.keys .
fuente
ng-hide="hasEvents()".Y si quieres usar esto con una lista filtrada, aquí hay un buen truco:
fuente
filteredItemsy configurando su valor para(items | filter:keyword), en otras palabras, la matriz devuelta por el filtro"face in filteredFaces = faces|filter:{deleted: true} | orderBy:'text'pero estoy de acuerdo con todos, este es un truco fabuloso.Es posible que desee consultar la directiva angular-ui
ui-ifsi solo desea eliminarulel DOM cuando la lista está vacía:fuente
ng-hidesin angular-ui, pero solo ocultará el nodo, no lo eliminará del árbol DOM. Con laui-ifdirectiva angular-ui , eliminará el nodo DOM. Por lo tanto, debe agregar al menos laui-ifdirectiva del código angular-ui a su propio código.ng-ifincluido!ng-ifestá creando un nuevo ámbito, dondeng-hideno lo está. Esto puede causar un comportamiento inesperado.Con las versiones más recientes de angularjs, la respuesta correcta a esta pregunta es usar
ng-if:Esta solución no parpadeará cuando la lista esté a punto de descargarse porque la lista tiene que estar definida y con una longitud de 0 para que se muestre el mensaje.
Aquí hay un plunker para mostrarlo en uso: http://plnkr.co/edit/in7ha1wTlpuVgamiOblS?p=preview
Sugerencia: También puede mostrar un texto de carga o una flecha giratoria:
fuente
Esto es similar a @Konrad 'ktoso' Malawski pero un poco más fácil de recordar.
Probado con Angular 1.4
fuente
ng-if='!filteredItems.length'item in items | filter: ... | filter: ...<li ng-if="!filteredItems.length">item in (filteredItems = (items | filter: someFilter))Aquí hay un enfoque diferente usando CSS en lugar de JavaScript / AngularJS.
CSS:
Margen:
Si la lista está vacía, <li ng-repeat = "item in filterItems">, etc. se comentará y se convertirá en un comentario en lugar de un elemento li.
fuente
Puedes usar este ng-switch:
fuente
Puede usar la
aspalabra clave para referir una colección bajo unng-repeatelemento:fuente
yo suelo usar ng-show
donde variable define por ejemplo
fuente
puede usar ng-if porque esto no se procesa en la página html y no ve su etiqueta html en la inspección ...
fuente