ฉันมีรายการอาหารใน $scope.raw
และฉันต้องการแสดงข้อมูลนี้เป็นคอลัมน์ ดังนั้นฉันจึงเปลี่ยนโครงสร้างเล็กน้อย ฉันทำสิ่งนี้ในฟังก์ชัน sortStuff()
และจัดเก็บข้อมูลที่อัปเดตไว้ใน $scope.allfood
มี $watch ที่เรียก sortStuff()
ทุกครั้งที่มีการเปลี่ยนแปลงใดๆ ใน $scope.raw
(ฉันใช้การลากและวางเพื่อเปลี่ยนหมวดอาหาร):
$scope.$watch('raw', function(){
$scope.allfood = $scope.sortStuff();
console.log($scope.allfood);
}, true);
นี่คือสิ่งที่เกิดขึ้นเมื่อมีการลากอาหารไปมา:
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
}
โดยพื้นฐานแล้ว ฉันจะค้นหาวัตถุที่ถูกต้องภายใน $scope.raw
และเปลี่ยน cat
เป็นหมวดหมู่ใหม่สำหรับอาหาร ฉันยังลบองค์ประกอบ dom ด้วยเพราะฉันต้องใช้ ng-repeat เพื่อรีเฟรชมุมมอง ดูเหมือนว่าจะทำงานได้ดี: console.log ภายใน $watch แสดงว่าวัตถุกำลังถูกย้ายไปยังหมวดหมู่ที่ถูกต้อง และข้อมูลจะมีลักษณะตามที่ควรจะเป็น อย่างไรก็ตาม หากมองด้วยสายตาแล้ว ng-repeat จะไม่สะท้อนถึงข้อมูล
การลากรายการจาก B ไป C ทำงานได้ดี การลากอันหนึ่งจาก A ไป B ทำให้สองรายการจาก B หายไป... ผลลัพธ์ไม่สอดคล้องกันมาก และฉันไม่รู้ว่าเกิดอะไรขึ้น
มีความคิดอะไรเกิดขึ้นบ้าง? หรืออาจมีข้อเสนอแนะสำหรับวิธีที่ดีกว่าในการทำเช่นนี้?