vacios objeto especifico eliminar elementos elemento como asociativo arreglo array javascript html angularjs

objeto - eliminar elementos vacios array javascript



¿Cómo eliminar un elemento del alcance en AngularJS? (10)

Angular tiene una función arrayRemove llamada arrayRemove , en su caso el método puede ser simplemente:

arrayRemove($scope.persons, person)

Lista de tareas simple, pero con un botón de eliminación en la página de la lista para cada elemento:

Plantilla relevante HTML:

<tr ng-repeat="person in persons"> <td>{{person.name}} - # {{person.id}}</td> <td>{{person.description}}</td> <td nowrap=nowrap> <a href="#!/edit"><i class="icon-edit"></i></a> <button ng-click="delete(person)"><i class="icon-minus-sign"></i></button> </td> </tr>

Método de controlador relevante:

$scope.delete = function (person) { API.DeletePerson({ id: person.id }, function (success) { // I need some code here to pull the person from my scope. }); };

Intenté $scope.persons.pull(person) y $scope.persons.remove(person) .

Aunque la base de datos se eliminó con éxito, no puedo sacar este elemento del alcance y no deseo realizar una llamada al servidor para obtener los datos que el cliente ya tiene, solo quiero eliminar a esta persona del alcance.

¿Algunas ideas?



Para la respuesta aceptada de @Joseph Silber no está funcionando, porque indexOf devuelve -1. Esto es probablemente porque Angular agrega un hashkey, que es diferente para mi $ scope.items [0] y mi artículo. Traté de resolver esto con la función angular.toJson (), pero no funcionó :(

Ah, descubrí el motivo ... Utilizo un método de fragmento para crear dos columnas en mi tabla mirando mis $ scope.items. ¡Lo siento!


Si tiene alguna función asociada a la lista, cuando realiza la función de empalme, la asociación también se elimina. Mi solución:

$scope.remove = function() { var oldList = $scope.items; $scope.items = []; angular.forEach(oldList, function(x) { if (! x.done) $scope.items.push( { [ DATA OF EACH ITEM USING oldList(x) ] }); }); };

La lista param se llama elementos . El parámetro x.done indica si el artículo será eliminado.

Otras referencias: otro ejemplo

Espero ayudarte Saludos.


Su problema no es realmente con Angular, sino con los métodos de Array. La forma correcta de eliminar un elemento en particular de una matriz es con Array.splice . Además, cuando usa ng-repeat, tiene acceso a la propiedad especial $index , que es el índice actual de la matriz que ingresó.

La solución es bastante simple:

Ver:

<a ng-click="delete($index)">Delete</a>

Controlador:

$scope.delete = function ( idx ) { var person_to_delete = $scope.persons[idx]; API.DeletePerson({ id: person_to_delete.id }, function (success) { $scope.persons.splice(idx, 1); }); };


También puedes usar esto

$scope.persons = $filter(''filter'')($scope.persons , { id: (''!'' + person.id) });


Tendrás que encontrar el índice de la person en tu matriz de persons , luego usar el método de Array.splice la matriz:

$scope.persons.splice( $scope.persons.indexOf(person), 1 );


Utilizaría la biblioteca Underscore.js que tiene una lista de funciones útiles.

without

without_.without(array, *values)

Devuelve una copia de la matriz con todas las instancias de los valores eliminados.

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4]

Ejemplo

var res = "deleteMe"; $scope.nodes = [ { name: "Node-1-1" }, { name: "Node-1-2" }, { name: "deleteMe" } ]; $scope.newNodes = _.without($scope.nodes, _.findWhere($scope.nodes, { name: res }));

Ver demostración en JSFiddle .

filter

var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); // => [2, 4, 6]

Ejemplo

$scope.newNodes = _.filter($scope.nodes, function(node) { return !(node.name == res); });

Ver demostración en Fiddle .


$scope.removeItem = function() { $scope.items.splice($scope.toRemove, 1); $scope.toRemove = null; };

esto funciona para mi!


array.splice(array.pop(item));