let $timeoutPromise = null;
$timeout.cancel($timeoutPromise);
$timeoutPromise = $timeout(() => {
$scope.$digest();
}, 0, false);
นี่เป็นทางออกที่ดีในการหลีกเลี่ยงข้อผิดพลาดนี้และหลีกเลี่ยงการใช้ $
คุณสามารถรวมสิ่งนี้กับ debounce (0) ถ้าโทรตามเหตุการณ์ภายนอก ด้านบนคือ 'debounce' ที่เราใช้และตัวอย่างเต็มของรหัส
.factory('debounce', [
'$timeout',
function ($timeout) {
return function (func, wait, apply) {
// apply default is true for $timeout
if (apply !== false) {
apply = true;
}
var promise;
return function () {
var cntx = this,
args = arguments;
$timeout.cancel(promise);
promise = $timeout(function () {
return func.apply(cntx, args);
}, wait, apply);
return promise;
};
};
}
])
และโค้ดของตัวเองเพื่อรับฟังเหตุการณ์บางอย่างและเรียก $ digest เพียงแค่ $ scope ที่คุณต้องการ
let $timeoutPromise = null;
let $update = debounce(function () {
$timeout.cancel($timeoutPromise);
$timeoutPromise = $timeout(() => {
$scope.$digest();
}, 0, false);
}, 0, false);
let $unwatchModelChanges = $scope.$root.$on('updatePropertiesInspector', function () {
$update();
});
$scope.$on('$destroy', () => {
$timeout.cancel($update);
$timeout.cancel($timeoutPromise);
$unwatchModelChanges();
});