
Quote from luishp on August 23, 2020, 6:16 pmVisualNEO Web can use any AngularJS directive. Probably the most useful is ng-repeat.
It allows to display JSON data collections in a very easy way. Plase take a look at the attached sample.
VisualNEO Web can use any AngularJS directive. Probably the most useful is ng-repeat.
It allows to display JSON data collections in a very easy way. Plase take a look at the attached sample.
Quote from Gaev on August 24, 2020, 12:11 am@luishp
This is a real hidden gem.
I believe you had informed us about it on this forum months ago; but I had forgotten. I wonder if this could be made easier by ...
- by defining the object to be repeated (template), as a separate Container/Dialog (with html or other inner objects)
- and somehow (perhaps via a neoCommand) linking the outer Container, the inner/template Container, and the array of json objectsThis kind of extended facility would make it very easy/efficient to show lists of composite objects (popularly deployed in smartphone Apps in Portrait Mode).
This is a real hidden gem.
I believe you had informed us about it on this forum months ago; but I had forgotten. I wonder if this could be made easier by ...
- by defining the object to be repeated (template), as a separate Container/Dialog (with html or other inner objects)
- and somehow (perhaps via a neoCommand) linking the outer Container, the inner/template Container, and the array of json objects
This kind of extended facility would make it very easy/efficient to show lists of composite objects (popularly deployed in smartphone Apps in Portrait Mode).

Quote from Palamar on August 26, 2020, 3:01 pmHola Luis;
Excelente ejemplo. Se podría realizar sin crear el array en el momento, sino traerlo desde afuera?. Estoy experimentando con Json traído desde Wordpress y si bien funciona bastante aceptable y los datos se acceden perfectamente, este hecho de insertar un elemento dentro de un objeto container a través de un Loop que contenga por ejemplo: "Nombre del post y autor" se hace excesivamente lento.
Gracias por los descubrimientos!
Hola Luis;
Excelente ejemplo. Se podría realizar sin crear el array en el momento, sino traerlo desde afuera?. Estoy experimentando con Json traído desde Wordpress y si bien funciona bastante aceptable y los datos se acceden perfectamente, este hecho de insertar un elemento dentro de un objeto container a través de un Loop que contenga por ejemplo: "Nombre del post y autor" se hace excesivamente lento.
Gracias por los descubrimientos!

Quote from luishp on August 26, 2020, 5:37 pmSi @palamar ¡claro! Esa es la idea: puedes traer el Array JSON desde una base de datos o desde Google Sheets o desde una consulta a una API de cualquier servicio externo.
Si @palamar ¡claro! Esa es la idea: puedes traer el Array JSON desde una base de datos o desde Google Sheets o desde una consulta a una API de cualquier servicio externo.

Quote from IoSoft on April 23, 2023, 6:28 am@luishp interesante, podría facilitarnos un archivo .neoapp de ejemplo, para un caso desde una gsheet...?
@luishp interesante, podría facilitarnos un archivo .neoapp de ejemplo, para un caso desde una gsheet...?

Quote from luishp on April 23, 2023, 8:26 am@iosoft te he respondido aquí:
https://visualneo.com/forum/topic/consulta-sobre-ng-repeat#postid-18936Saludos
@iosoft te he respondido aquí:
https://visualneo.com/forum/topic/consulta-sobre-ng-repeat#postid-18936
Saludos

Quote from IoSoft on April 1, 2024, 4:33 amBuenas noches, espero estén bien. Retornando a estos temas referidos a ng-repeat, mi consulta es la siguiente:
Tengo el siguiente div, muy similar al que colocaron de ejemplo:
<span ng-repeat="object in biblos | filter:searchText | orderBy: 'TEMAS'">
<div id=""> <font size="3">[object.TEMAS]</font><br>
</span>(mediante éste, yo muestro en mi app un listado con los registros de una base de datos, exclusivamente del campo "TEMAS" ordenados alfabéticamente)
Ahora bien, lo que necesito saber es: ¿se puede especificar que me muestre todos los registros, EXCEPTO los repetidos o duplicados...? ¿Hay algún filtro del ng-repeat para ello...?
Gracias. Saludos cordiales
Buenas noches, espero estén bien. Retornando a estos temas referidos a ng-repeat, mi consulta es la siguiente:
Tengo el siguiente div, muy similar al que colocaron de ejemplo:
<span ng-repeat="object in biblos | filter:searchText | orderBy: 'TEMAS'">
<div id=""> <font size="3">[object.TEMAS]</font><br>
</span>
(mediante éste, yo muestro en mi app un listado con los registros de una base de datos, exclusivamente del campo "TEMAS" ordenados alfabéticamente)
Ahora bien, lo que necesito saber es: ¿se puede especificar que me muestre todos los registros, EXCEPTO los repetidos o duplicados...? ¿Hay algún filtro del ng-repeat para ello...?
Gracias. Saludos cordiales

Quote from luishp on April 1, 2024, 9:59 amSí, puedes filtrar los elementos repetidos en un ng-repeat utilizando el filtro
unique. Sin embargo, el filtrouniqueno está incluido de forma nativa en AngularJS, por lo que necesitarás implementarlo. No lo he probado, pero esto debería funcionar.
En Project > Properties > Advanced > Custom Metadata > Body incluye este código:<script> // Define the filter 'unique' angular.module('NeoApp').filter('unique', function() { return function(collection, keyname) { var output = [], keys = []; angular.forEach(collection, function(item) { var key = item[keyname]; if (keys.indexOf(key) === -1) { keys.push(key); output.push(item); } }); return output; }; }); </script>Después modifica tu HTML para utilizar
unique:<span ng-repeat="object in biblos | filter:searchText | orderBy: 'TEMAS' | unique: 'TEMAS'"> <div id=""> <font size="3">[object.TEMAS]</font><br> </span>Fíjate también que desde hace tiempo VisualNEO Web incluye ng-repeat en el panel de Properties > Advanced, con lo que puedes utilizarlo con objetos Container directamente.
No dejes de comentar si finalmente funcionó.
Saludos.
Sí, puedes filtrar los elementos repetidos en un ng-repeat utilizando el filtro unique. Sin embargo, el filtro unique no está incluido de forma nativa en AngularJS, por lo que necesitarás implementarlo. No lo he probado, pero esto debería funcionar.
En Project > Properties > Advanced > Custom Metadata > Body incluye este código:
<script>
// Define the filter 'unique'
angular.module('NeoApp').filter('unique', function() {
return function(collection, keyname) {
var output = [],
keys = [];
angular.forEach(collection, function(item) {
var key = item[keyname];
if (keys.indexOf(key) === -1) {
keys.push(key);
output.push(item);
}
});
return output;
};
});
</script>
Después modifica tu HTML para utilizar unique:
<span ng-repeat="object in biblos | filter:searchText | orderBy: 'TEMAS' | unique: 'TEMAS'"> <div id=""> <font size="3">[object.TEMAS]</font><br> </span>
Fíjate también que desde hace tiempo VisualNEO Web incluye ng-repeat en el panel de Properties > Advanced, con lo que puedes utilizarlo con objetos Container directamente.
No dejes de comentar si finalmente funcionó.
Saludos.

Quote from IoSoft on April 1, 2024, 9:22 pmMuchísimas gracias @luishp!!!
De hecho, con tus indicaciones anteriores, pude lograr incorporar los elementos del ng-repeat sin duplicados en una lista de opciones, con el siguiente código:
<span ng-repeat="object in biblos | filter:searchText2 | orderBy: 'TEMAS' | unique: 'TEMAS'">
<option>[object.TEMAS]</option>
</span>ADJUNTO IMAGEN.
Ahora otra consulta, ¿se podría agregar una opción o botón para copiar (al portapapeles) el texto de algún elemento presentado por el ng-repeat? sé que se puede seleccionar y usar las teclas Ctrl + C; pero se puede agregar código al código expuesto más arriba, para hacerlo sin usar teclado...?
Muchísimas gracias @luishp!!!
De hecho, con tus indicaciones anteriores, pude lograr incorporar los elementos del ng-repeat sin duplicados en una lista de opciones, con el siguiente código:
<span ng-repeat="object in biblos | filter:searchText2 | orderBy: 'TEMAS' | unique: 'TEMAS'">
<option>[object.TEMAS]</option>
</span>
ADJUNTO IMAGEN.
Ahora otra consulta, ¿se podría agregar una opción o botón para copiar (al portapapeles) el texto de algún elemento presentado por el ng-repeat? sé que se puede seleccionar y usar las teclas Ctrl + C; pero se puede agregar código al código expuesto más arriba, para hacerlo sin usar teclado...?
Uploaded files: