วิธีการเชิงมุม
วิธีเชิงมุมที่ถูกต้องในการทำเช่นนี้คือการเขียนแอปพลิเคชันหน้าเดียว AJAX ในเทมเพลตฟอร์มจากนั้นเติมแบบไดนามิกจากโมเดล ค่าเริ่มต้นของแบบจำลองไม่ได้บรรจุจากแบบฟอร์มโดยค่าเริ่มต้นเนื่องจากแบบจำลองเป็นแหล่งความจริงเดียว แต่แองกูลาร์จะไปทางอื่นและพยายามเติมแบบฟอร์มจากแบบจำลอง
อย่างไรก็ตามหากคุณไม่มีเวลาเริ่มต้นใหม่
หากคุณมีแอปที่เขียนขึ้นสิ่งนี้อาจเกี่ยวข้องกับการเปลี่ยนแปลงสถาปัตยกรรมที่ค่อนข้างหนักหน่วง หากคุณกำลังพยายามใช้ Angular เพื่อปรับปรุงแบบฟอร์มที่มีอยู่แทนที่จะสร้างแอปพลิเคชันหน้าเดียวทั้งหมดตั้งแต่ต้นคุณสามารถดึงค่าจากแบบฟอร์มและเก็บไว้ในขอบเขตในเวลาเชื่อมโยงโดยใช้คำสั่ง แองกูลาร์จะผูกค่าในขอบเขตกลับไปที่ฟอร์มและเก็บไว้ในซิงค์
การใช้คำสั่ง
คุณสามารถใช้คำสั่งที่ค่อนข้างง่ายเพื่อดึงค่าจากแบบฟอร์มและโหลดไปยังขอบเขตปัจจุบัน ที่นี่ฉันได้กำหนดคำสั่ง initFromForm
var myApp = angular.module("myApp", ['initFromForm']);
angular.module('initFromForm', [])
.directive("initFromForm", function ($parse) {
return {
link: function (scope, element, attrs) {
var attr = attrs.initFromForm || attrs.ngModel || element.attrs('name'),
val = attrs.value;
if (attrs.type === "number") {val = parseInt(val)}
$parse(attr).assign(scope, val);
}
};
});
คุณสามารถเห็นฉันได้กำหนดสองทางเลือกเพื่อรับชื่อรุ่น คุณสามารถใช้คำสั่งนี้ร่วมกับคำสั่ง ngModel หรือผูกติดกับสิ่งอื่นที่ไม่ใช่ $ scope หากคุณต้องการ
ใช้แบบนี้:
<input name="test" ng-model="toaster.test" value="hello" init-from-form />
{{toaster.test}}
หมายเหตุสิ่งนี้จะทำงานกับ textareas และเลือกดรอปดาวน์
<textarea name="test" ng-model="toaster.test" init-from-form>hello</textarea>
{{toaster.test}}