2017-02-23 53 views
0

我想定期从角度控制器方法发送ajax请求。因为我写了下面的代码。在角度控制器方法中递归调用匿名方法

var mainApp = angular.module('myapp',[]); 
mainApp.controller('controller', function($scope,$http,$window,$timeout) { 
    $('#radioBtn a').on('click', function(){ 
      $http({ 
       method:, 
       url:, 
       params:{parameters} 
      }).then(function(success){ 
      },function(error){ 
      }); 

      $timeout(function(){ 
       //how to call the anonymous function passed to $('#radioBtn     a').on() here. 
      },30000); 

     }); 

我没有得到如何从超时函数调用匿名方法。使用this()失败。

回答

0

试试这种方法。

var mainApp = angular.module('myapp',[]); 
mainApp.controller('controller', function($scope,$http,$window,$interval) { 
    $('#radioBtn a').on('click', function(){ 


      $interval(function(){ 
       $http({ 
        method:, 
        url:, 
        params:{parameters} 
       }).then(function(success){ 
       },function(error){ 
       });  
      },30000); 

     }); 
+0

他将要在这里注入,而不是$超时$间隔。然而这非常危险。因为每次按下按钮都会触发新的时间间隔。 – MikeOne

0

第一关:不绑定到元素点击这样,使用ng-click指令 - 其实只是甚至不加载的jQuery在你的应用程序,在99%的情况下,你最好没有它。

第二:使用角的$interval服务。检查下面的代码示例。

angular.module('app', []) 
 
.controller('ctrl', function($scope, $interval) { 
 
    
 
    $scope.numbers = []; 
 
    $scope.startInterval = function() {  
 
    $scope.interval = $interval(function() { 
 
     $scope.numbers.push($scope.numbers.length); 
 
    }, 1000)  
 
    } 
 
})
<!DOCTYPE html> 
 
<html> 
 

 
    <head> 
 
    <script data-require="[email protected]" data-semver="1.6.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.js"></script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script src="script.js"></script> 
 
    </head> 
 

 
    <body ng-app="app" ng-controller="ctrl"> 
 
    <button ng-if="!interval" ng-click="startInterval()">Start polling</button> 
 
    <div ng-repeat="number in numbers"> 
 
     {{number}} 
 
    </div> 
 
    </body> 
 
</html>