Ho un elenco di prodotti alimentari in $scope.raw
e voglio mostrare questi dati in colonne, quindi sto cambiando leggermente la struttura. Lo faccio nella funzione sortStuff()
e memorizzo i dati aggiornati in $scope.allfood
. C'è un $ orologio che chiama sortStuff()
qualcosa cambia ogni volta che in $scope.raw
(sto usando il drag and drop per cambiare la categoria di alimenti):
$scope.$watch('raw', function(){
$scope.allfood = $scope.sortStuff();
console.log($scope.allfood);
}, true);
Questo è ciò che accade quando il cibo viene trascinato in giro:
receive:function(event, ui) {
var issueScope = angular.element(ui.item).scope();
scope.$apply(function() {
var recp = _.find(scope.raw, function(lineitem){
return lineitem.name === issueScope.receipe.name;
})
recp.cat = scope.col.name;
})
$(ui.item).remove(); // remove DOM
}
Fondamentalmente, cerco l'oggetto giusto all'interno di $scope.raw
e cambio cat
in una nuova categoria per il cibo. Inoltre cancello l'elemento dom perché conto su ng-repeat per aggiornare la vista. Questo sembra funzionare bene: console.log all'interno di $ watch mostra che l'oggetto viene spostato nella giusta categoria e i dati sembrano come dovrebbero apparire. Tuttavia, visivamente, ng-repeat non riflette i dati.
Il trascinamento di un elemento da B a C funziona correttamente. Trascinandone uno da A a B, scompaiono due elementi da B ... i risultati sono molto incoerenti e non ho idea di cosa stia succedendo.
Qualche idea cosa non va? O forse qualche suggerimento per un modo migliore per farlo?
Si deve usare $ watchCollection (funzione 'grezzo',() {}); ma l'ho fatto e vedo ancora gli stessi problemi nella mia app ... – philwills