example array arrays angularjs controller ng-repeat

arrays - array - Cómo empujar objetos en AngularJS entre matrices ngRepeat



ng-repeat select (3)

Prueba este también ...

<!DOCTYPE html> <html> <body> <p>Click the button to join two arrays.</p> <button onclick="myFunction()">Try it</button> <p id="demo"></p> <p id="demo1"></p> <script> function myFunction() { var hege = [{ 1: "Cecilie", 2: "Lone" }]; var stale = [{ 1: "Emil", 2: "Tobias" }]; var hege = hege.concat(stale); document.getElementById("demo1").innerHTML = hege; document.getElementById("demo").innerHTML = stale; } </script> </body> </html>

Así que soy nuevo en AngularJS y estoy tratando de crear una aplicación de lista muy simple, donde puedo crear una lista de elementos n-repeat y luego insertar un elemento seleccionado en otra lista ng-repeat. Aunque mi problema parece ser muy simple, aún no he podido encontrar una solución adecuada.

Así que aquí está el marcado simplificado:

<body ng-app="MyApp"> <div id="MyApp" ng-controller="mainController"> <div id="AddItem"> <h3>Add Item</h3> <input value="1" type="number" placeholder="1" ng-model="itemAmount"> <input value="" type="text" placeholder="Name of Item" ng-model="itemName"> <br/> <button ng-click="addItem()">Add to list</button> </div> <!-- begin: LIST OF CHECKED ITEMS --> <div id="CheckedList"> <h3>Checked Items: {{getTotalCheckedItems()}}</h3> <h4>Checked:</h4> <table> <tr ng-repeat="item in checked" class="item-checked"> <td><b>amount:</b> {{item.amount}} -</td> <td><b>name:</b> {{item.name}} -</td> <td> <i>this item is checked!</i> </td> </tr> </table> </div> <!-- end: LIST OF CHECKED ITEMS --> <!-- begin: LIST OF UNCHECKED ITEMS --> <div id="UncheckedList"> <h3>Unchecked Items: {{getTotalItems()}}</h3> <h4>Unchecked:</h4> <table> <tr ng-repeat="item in items" class="item-unchecked"> <td><b>amount:</b> {{item.amount}} -</td> <td><b>name:</b> {{item.name}} -</td> <td> <button ng-click="toggleChecked($index)">check item</button> </td> </tr> </table> </div> <!-- end: LIST OF ITEMS --> </div> </body>

Y aquí va mi Script AngularJS:

var app = angular.module("MyApp", []); app.controller("mainController", function ($scope) { // Item List Arrays $scope.items = []; $scope.checked = []; // Add a Item to the list $scope.addItem = function () { $scope.items.push({ amount: $scope.itemAmount, name: $scope.itemName }); // Clear input fields after push $scope.itemAmount = ""; $scope.itemName = ""; }; // Add Item to Checked List and delete from Unchecked List $scope.toggleChecked = function (item, index) { $scope.checked.push(item); $scope.items.splice(index, 1); }; // Get Total Items $scope.getTotalItems = function () { return $scope.items.length; }; // Get Total Checked Items $scope.getTotalCheckedItems = function () { return $scope.checked.length; }; });

Entonces, cuando hago clic en el botón, mi función toggleChecked () se dispara y realmente empuja algo dentro de mi lista de verificación. Sin embargo, parece ser solo un objeto vacío. La función no puede obtener el elemento real que quiero presionar.

¿Qué estoy haciendo mal aquí?

NOTA: Se pretende verificar los elementos haciendo clic en un botón. No quiero usar casillas de verificación en este caso.

Puede ver el modelo de trabajo aquí: http://jsfiddle.net/7n8NR/1/

Saludos, Norman


Sería mucho mejor utilizar la misma matriz con ambas listas y crear filtros angulares para lograr su objetivo.

http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filters

El código aproximado, no probado sigue:

appModule.filter(''checked'', function() { return function(input, checked) { if(!input)return input; var output = [] for (i in input){ var item = input[i]; if(item.checked == checked)output.push(item); } return output } });

y la vista (agregué un botón "desmarcar" también)

<div id="AddItem"> <h3>Add Item</h3> <input value="1" type="number" placeholder="1" ng-model="itemAmount"> <input value="" type="text" placeholder="Name of Item" ng-model="itemName"> <br/> <button ng-click="addItem()">Add to list</button> </div> <!-- begin: LIST OF CHECKED ITEMS --> <div id="CheckedList"> <h3>Checked Items: {{getTotalCheckedItems()}}</h3> <h4>Checked:</h4> <table> <tr ng-repeat="item in items | checked:true" class="item-checked"> <td><b>amount:</b> {{item.amount}} -</td> <td><b>name:</b> {{item.name}} -</td> <td> <i>this item is checked!</i> <button ng-click="item.checked = false">uncheck item</button> </td> </tr> </table> </div> <!-- end: LIST OF CHECKED ITEMS --> <!-- begin: LIST OF UNCHECKED ITEMS --> <div id="UncheckedList"> <h3>Unchecked Items: {{getTotalItems()}}</h3> <h4>Unchecked:</h4> <table> <tr ng-repeat="item in items | checked:false" class="item-unchecked"> <td><b>amount:</b> {{item.amount}} -</td> <td><b>name:</b> {{item.name}} -</td> <td> <button ng-click="item.checked = true">check item</button> </td> </tr> </table> </div> <!-- end: LIST OF ITEMS -->

Entonces no necesitas los métodos de alternar, etc. en tu controlador


cambia tu método a:

$scope.toggleChecked = function (index) { $scope.checked.push($scope.items[index]); $scope.items.splice(index, 1); };

Demo de trabajo