【问题标题】:Angularjs $timeout not executingAngularjs $超时未执行
【发布时间】:2017-01-10 03:05:05
【问题描述】:

我是 Angularjs 的新手,想在页面加载后添加一个计时器。我在这里阅读了许多类似的问题,但仍然无法解决我的问题。我在视图中添加了data-ng-init="init()"。 这是控制器:

    'use strict';

    angular.module('tempApp')
      .controller('MainController',['$scope','$timeout','dService', function ($scope,$timeout, dService) {

        $scope.init =  function(){
            console.log("Safety checkStatus page load");
            $timeout(callAtTimeout(),3000);
        }


    function callAtTimeout(){
        console.log("Safety checkStatus ***");
    }

 }]);

jsfiddle:https://jsfiddle.net/Zusee/s6xy48t0/9/

这里的 dService 是我要使用的单独的服务 js 文件。任何帮助,将不胜感激。

【问题讨论】:

    标签: javascript angularjs angularjs-directive timeout settimeout


    【解决方案1】:
    <!DOCTYPE html>
    <html ng-app="tempApp">
    <head>
        <title>Test</title>
        <script src="angular.min.js"></script>
    </head>
    <body ng-controller="MainController">
    <script type="text/javascript">
           'use strict';
    
               angular.module('tempApp', [])
                 .controller('MainController',['$scope','$timeout', function ($scope,$timeout) {
    
                   $scope.init =  function(){
                       console.log("Safety checkStatus page load");
    
                       $timeout(callAtTimeout, 3000);
                   };
                   function callAtTimeout(){
                           console.log("Safety checkStatus ***");
                       }
    
    $scope.init();
            }]);
    </script>
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      你可以试试这个?

      'use strict';
      
          angular.module('tempApp')
            .controller('MainController',['$scope','$timeout','dService', function ($scope,$timeout, dService) {
      
             $scope.init =  function(){
      
                  console.log("Safety checkStatus page load");
      
                  $timeout(function () {
                        $scope.callAtTimeout();
                  }, 1000);
      
             } 
      
      
             $scope.callAtTimeout = function(){
                 console.log("Safety checkStatus ***");
             }
      
             $scope.init();
       }]);
      

      【讨论】:

      • 感谢您的支持。但它仍然没有按预期工作。
      • 对不起。一个问题......你为什么使用 }]);两次?
      • mm..sorry 这是错字。 :
      • 谢谢,这对我有用。但为什么它会起作用?最初我有 $timeout($scope.callAtTimeout(), 1000);然后我把它改成了 $timeout(function () { $scope.callAtTimeout() }, 1000);它开始工作了。
      【解决方案3】:

      添加“dService”

      .controller('MainController',['$scope','$timeout', 'dService', function ($scope,$timeout, dService) {
      

      并使用喜欢

      $timeout(callAtTimeout,3000);
      

      【讨论】:

        【解决方案4】:
         'use strict';
        
                angular.module('tempApp')
                  .controller('MainController',['$scope','$timeout','dService', function ($scope,$timeout, dService) {
        
                    $scope.init =  function(){
                        console.log("Safety checkStatus page load");
                        $timeout(function () {
                          callAtTimeout()
                        }, 3000);
                    }  }]);
        
        
                function callAtTimeout(){
                    console.log("Safety checkStatus ***");
                }
        
             }]);
        

        您可能还需要显式调用 $scope.init()

        【讨论】:

        • 感谢您的支持。我也试过了,但没有运气。
        • 请检查我编辑的答案是否已更改 $timeout()
        • @urvashi `我添加了 data-ng-init="init()"` 你不需要显式调用它
        • 是的,这也是正确的,因为 html 代码不在这里,所以我添加了 'may' :)
        • @ZuseeWeekin:在这里查看jsfiddle.net/s6xy48t0/10。我更新了你的小提琴。现在警报正在显示。由于服务未在小提琴中定义,因此您收到错误。
        【解决方案5】:

        问题是 $scope.init() 中的额外括号

        $scope.init =  function(){
             console.log("Safety checkStatus page load");
             $timeout(function () {
                  callAtTimeout();
             }, 3000);
        };
        

        【讨论】:

        • 我的视图中有 data-ng-init="init()"。
        • 那么不需要调用控制器,但删除额外的括号@ZuseeWeekin
        • mm..sorry 这是错字。 :)
        【解决方案6】:

        如果你想设置定时器,为什么需要$timeout

        $timeout 将执行一次。

        试试$interval

        这里是变化:

        $scope.init = function() {
                  console.log("Safety checkStatus page load");
                  $interval($scope.callAtTimeout, 1000);
                }
                $scope.callAtTimeout = function() {
        
                  console.log("Safety checkStatus ***");
                }
        

        这是工作的plunker

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-07
          • 2017-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多