ในคำพื้นฐาน $timeout
หมายถึง เชิงมุมเมื่อ setTimeout
- ถึง JavaScript
หากคุณยังคงคิดจะใช้ setTimeout
ดังนั้นคุณต้องเรียกใช้ $scope.$apply()
หลังจากนั้น
เป็นบันทึกด้านข้าง
ฉันขอแนะนำให้คุณอ่าน ฉันจะ “คิดใน AngularJS” ได้อย่างไรหากฉันมีพื้นหลัง jQuery โพสต์
และ AngularJS: ใช้ $timeout ไม่ใช่ setTimeout
ตัวอย่างที่ 1: $หมดเวลา
$scope.timeInMs = 0;
var countUp = function() {
$scope.timeInMs+= 500;
$timeout(countUp, 500);
}
$timeout(countUp, 500);
ตัวอย่างที่ 2: setTimeout (ตรรกะเดียวกัน)
$scope.timeInMs_old = 0;
var countUp_old = function() {
$scope.timeInMs_old+= 500;
setTimeout(function () {
$scope.$apply(countUp_old);
}, 500);
}
setTimeout(function () {
$scope.$apply(countUp_old);
}, 500);
การสาธิต ซอ
$timeout ยังส่งคืนสัญญาด้วย
JS
function promiseCtrl($scope, $timeout) {
$scope.result = $timeout(function({
return "Ready!";
}, 1000);
}
HTML
<div ng-controller="promiseCtrl">
{{result || "Preparing…"}}
</div>
$timeout ยังทำให้เกิดวงจรการแยกย่อยด้วย
พิจารณาว่าเรามีโค้ดของบุคคลที่สาม (ไม่ใช่ AngularJS) เช่นปลั๊กอิน Cloudinary ที่อัปโหลดไฟล์บางไฟล์และส่งคืนการโทรกลับด้วยอัตราเปอร์เซ็นต์ 'ความคืบหน้า' ให้เรา
// .....
.on("cloudinaryprogress",
function (e, data) {
var name = data.files[0].name;
var file_ = $scope.file || {};
file_.progress = Math.round((data.loaded * 100.0) / data.total);
$timeout(function(){
$scope.file = file_;
}, 0);
})
เราต้องการอัปเดต UI ของเรา aka $scope.file = file_;
ว่างเปล่า $timeout
ทำงานให้เรา มันจะทริกเกอร์วงจรการแยกย่อย และ $scope.file
อัปเดตโดยบุคคลที่สามจะแสดงผลอีกครั้งใน GUI
person
Maxim Shoustin
schedule
26.10.2013