การกรองแบบสองทางใน AngularJS ทำอย่างไร?
สิ่งที่น่าสนใจอย่างหนึ่งที่ AngularJS สามารถทำได้คือใช้ตัวกรองกับนิพจน์การเชื่อมโยงฐานข้อมูลซึ่งเป็นวิธีที่สะดวกในการนำไปใช้เช่นสกุลเงินเฉพาะวัฒนธรรมหรือการจัดรูปแบบวันที่ของคุณสมบัติของโมเดล นอกจากนี้ยังดีที่มีคุณสมบัติที่คำนวณในขอบเขต ปัญหาคือคุณลักษณะเหล่านี้ไม่ทำงานกับสถานการณ์จำลองการเชื่อมต่อฐานข้อมูลแบบสองทาง - การเชื่อมฐานข้อมูลทางเดียวจากขอบเขตไปยังมุมมอง นี่ดูเหมือนจะเป็นการมองข้ามไปอย่างชัดเจนในห้องสมุดที่ยอดเยี่ยมอย่างอื่นหรือฉันพลาดอะไรไป? ในKnockoutJSฉันสามารถสร้างคุณสมบัติที่คำนวณด้วยการอ่าน / เขียนซึ่งอนุญาตให้ฉันระบุคู่ของฟังก์ชันซึ่งเรียกว่าเพื่อรับค่าของคุณสมบัติและอีกฟังก์ชันหนึ่งที่ถูกเรียกเมื่อตั้งค่าคุณสมบัติ สิ่งนี้ทำให้ฉันสามารถใช้ตัวอย่างเช่นอินพุตที่รับรู้วัฒนธรรมโดยให้ผู้ใช้พิมพ์ "$ 1.24" และแยกวิเคราะห์เป็นลอยใน ViewModel และมีการเปลี่ยนแปลงใน ViewModel ที่แสดงในอินพุต สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถพบได้คือการใช้$scope.$watch(propertyName, functionOrNGExpression);สิ่งนี้ช่วยให้ฉันมีฟังก์ชันที่เรียกใช้เมื่อคุณสมบัติในไฟล์$scopeเปลี่ยนแปลง แต่สิ่งนี้ไม่สามารถแก้ปัญหาได้เช่นปัญหาการป้อนข้อมูลที่คำนึงถึงวัฒนธรรม สังเกตเห็นปัญหาเมื่อฉันพยายามแก้ไข$watchedคุณสมบัติภายใน$watchวิธีการ: $scope.$watch("property", function (newValue, oldValue) { $scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue; $scope.property = Globalize.parseFloat(newValue); }); ( http://jsfiddle.net/gyZH8/2/ ) องค์ประกอบการป้อนข้อมูลจะสับสนมากเมื่อผู้ใช้เริ่มพิมพ์ ฉันปรับปรุงโดยการแยกคุณสมบัติออกเป็นสองคุณสมบัติหนึ่งสำหรับค่าที่ไม่ได้แยกวิเคราะห์และอีกค่าหนึ่งสำหรับค่าที่แยกวิเคราะห์: $scope.visibleProperty= …