ฉันรู้สึกกระอักกระอ่วนเกี่ยวกับวิธีที่ดีที่สุด (และถูกต้อง) หากฉันต้องการปิดการใช้งานการควบคุมแบบฟอร์ม (หรืออย่างน้อยก็ทำให้ไม่สามารถใช้งานได้สำหรับการโต้ตอบของผู้ใช้) ในช่วงเวลาหนึ่งที่ผู้ใช้คลิกปุ่ม "บันทึก" หรือ "ส่ง" และข้อมูลที่เดินทางผ่านสายไฟ ฉันไม่ต้องการใช้ JQuery (ซึ่งชั่วร้าย !!!) และค้นหาองค์ประกอบทั้งหมดเป็นอาร์เรย์ (ตามคลาสหรือเครื่องหมายแอตทริบิวต์) ความคิดที่ฉันมีจนถึงตอนนี้คือ:
- ทำเครื่องหมายองค์ประกอบทั้งหมดด้วย
cm-form-control
คำสั่งที่กำหนดเองซึ่งจะสมัครรับการแจ้งเตือน 2 รายการ: "ส่งข้อมูล" และ "ประมวลผลข้อมูล" จากนั้นรหัสที่กำหนดเองจะรับผิดชอบในการส่งการแจ้งเตือนครั้งที่สองหรือแก้ไขคำสัญญา - ใช้การ
promiseTracker
บังคับ (โชคร้าย!) เพื่อสร้างรหัสที่โง่มากเช่นng-show="loadingTracker.active()"
. เห็นได้ชัดว่าองค์ประกอบบางอย่างไม่มีng-disabled
และฉันไม่ต้องการให้ผู้ใช้ng-hide/show
หลีกเลี่ยงปุ่ม "เต้นรำ" - กัดกระสุนแล้วยังใช้ JQuery
ใครมีความคิดที่ดีกว่านี้หรือไม่? ขอบคุณล่วงหน้า!
อัปเดต: แนวคิด fieldset ใช้งานได้จริง นี่คือซอง่ายๆสำหรับผู้ที่ยังต้องการทำเหมือนเดิมhttp://jsfiddle.net/YoMan78/pnQFQ/13/
HTML:
<div ng-app="myApp">
<ng-form ng-controller="myCtrl">
Saving: {{isSaving}}
<fieldset ng-disabled="isSaving">
<input type="text" ng-model="btnVal"/>
<input type="button" ng-model="btnVal" value="{{btnVal}}"/>
<button ng-click="save()">Save Me Maybe</button>
</fieldset>
</ng-form>
</div>
และ JS:
var angModule = angular.module("myApp", []);
angModule.controller("myCtrl", function ($scope, $filter, $window, $timeout) {
$scope.isSaving = undefined;
$scope.btnVal = 'Yes';
$scope.save = function()
{
$scope.isSaving = true;
$timeout( function()
{
$scope.isSaving = false;
alert( 'done');
}, 10000);
};
});
fieldset
ไม่สามารถใช้เป็นคอนเทนเนอร์ flexbox ได้