【问题标题】:How to execute function using setInterval?如何使用 setInterval 执行函数?
【发布时间】:2016-09-04 05:37:22
【问题描述】:

我有模态窗口,我有函数setConfirmation 来根据逻辑设置模态窗口按钮(是、否和确定),现在当调用确定按钮okCallback 时,我想将是和否按钮设置回模态窗口,因为这些是默认按钮。

现在,当用户单击“确定”时,我们关闭了模态窗口,但“是”和“没有”在几秒钟内闪烁,因此我创建了另一个函数 resetConfirmation,我从 successCallBack 调用,但(是和否)按钮仍然闪烁模态窗口关闭前几秒。

我如何在 1 秒后执行 resetConfirmation function 以解决我认为的问题或任何其他建议也会受到赞赏?

main.js

   var setConfirmationWinButtons = function(hideYesBtn, hideNoBtn, showOkBtn) {
     $scope.hideYesBtn = hideYesBtn;
     $scope.hideNoBtn = hideNoBtn;
     $scope.showOkBtn = showOkBtn;
 };

 $scope.successMessage = function(mesg) {
     setConfirmationWinButtons(true, true, true);
     $scope.messageText = mesg;
     $scope.confirmationWin.open().center();
     $scope.okCallback = $scope.successCallBack;
 };
 $scope.successCallBack = function() {
     $scope.confirmationWin.close();
     resetCofirmationWin();
 };
 var resetCofirmationWin = function() {
     setConfirmationWinButtons(false, false, false);
 };

【问题讨论】:

  • 注入$timeout并使用$timeout(function() { resetConfirmationWin(); }, 1000)
  • 所以在这种情况下我需要在successCallback函数之前声明resetConfirmationWin函数,这样它就不会抛出错误reset is not defined
  • 收到此错误angular.js:11594 ReferenceError: resetConfirmationWin is not defined 甚至在successCallback 之前定义
  • 我明白了,谢谢你的帮助

标签: javascript angularjs timeout settimeout setinterval


【解决方案1】:

1) 注入$timeout,然后使用代码:

$timeout(function() { 
  resetConfirmationWin(); 
}, 1000);

2) 你也可以使用简单的超时:

setTimeout(function() { 
  resetConfirmationWin(); 
}, 1000);

它更高效,因为它不会触发$scope.$apply(),但你可能会错过模型更新。

风格指南中不建议这样做。

【讨论】:

    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多