在调用API时,angularjs服务无法正常工作?

问题描述:

我正在使用包含控制器和服务的角度项目。问题从以下代码出来:在调用API时,angularjs服务无法正常工作?

qrcodeCtrl.js

angular 
.module('Admin',['ngResource']) 
.controller('qrcodeCtrl',function($scope,qrcodeservice,statusservice){ 
      $scope.init = function(){ 
       $scope.getQrcodes(); 
      } 
      $scope.getQrcodes = function(){ 
       qrcodeservice.getQrcodes() 
       .then(function(res){ 
        $scope.qrcodes = qrcodeservice.qrcodeList; 
        $scope.loginstatus = []; 
        var logininfo = [];  
        for(var i = 0; i < $scope.qrcodes.length; i++){ 
         logininfo[i] = self.setInterval(getloginfo,10000,i); 
        } 
        function getloginfo(i){ 
         uuid = $scope.qrcodes[i]; 
         statusservice.getstatus(uuid).then(function (result) { 
          console.log(uuid+" "+result.code); 
          uuid = result.uuid; 
          switch(result.code){ 
           case 201 : $scope.loginstatus[uuid] = 'login ...';break; 
           case 200 : $scope.loginstatus[uuid] = 'login success';window.clearInterval(logininfo[i]);break; 
           case 500 : $scope.loginstatus[uuid] = 'login fail';window.clearInterval(logininfo[i]);break; 
           default : $scope.loginstatus[uuid] = 'waitting';break;  //code 408 
          } 
         },function (err) { 
          console.log(err); 
         }) 
         return; 
        } 
       },function(err){ 
        console.log(err); 
       }) 
      } 
      $scope.init(); 
     }) 

statuservice.js

angular 
.module('Admin',['ngResource']) 
.service('statusservice',function ($http,$q) { 
      var auth = this; 
      auth.getstatus = function(uuid){ 
       var defer = $q.defer(); 
       // //debug 
       // var code = 200; 
       // var result = {"uuid":uuid,"code":code}; 
       // defer.resolve(result); 
       // return defer.promise; 
       // //================= 
       $http.get("/check?uuid="+uuid) 
        .success(function(code){ 
         res = {"uuid":uuid,"code":code}; 
         defer.resolve(res); 
        }) 
        .error(function(err,status){ 
         console.log(err); 
         defer.reject(err); 
        }) 
       return defer.promise; 
      } 
     }) 

有关代码,服务是从API中,测试工作越来越细的登录信息。并且控制器不断设置从服务获取登录信息的时间间隔。当它输出登录成功(200)或登录失败(500)时,间隔将停止。这些代码适用于项目的登录部分。

当服务没有从API获取登录代码并且只是编写代码时,(注释部分)服务工作正常,代码为200,间隔停止,其他视图渲染正常。

但是,当服务从API获取登录代码时,间隔不会停止。并从铬控制台,我发现代码是成功更改为200,但仍然循环的时间间隔。并且该视图不呈现登录成功。

我正在学习棱角几天,有人可以告诉我为什么会发生?

+0

什么是'self'财产申报?为什么它'php'的扩展?你为什么不使用角度的'$ interval'服务? – devqon

+0

对不起,php扩展是编码问题时的错。并且'self'的使用是我从Internate中搜索的结果,我发现它既可以使用'self.setInterval()'或'window.setInterval()',也可以使用'setInterval()'仍然有效。 Finnaly,因为你提到'$ interval'服务,我现在就试试看。 – digjack

您的模块声明和使用是不正确

angular.module('Admin',['ngResource']).something should not be done; 
每次

这个初始化模块管理。

你应该在下面的格式

var app = angular.module('Admin',['ngResource']); 

angular 
.module('Admin') 
.service('statusservice',function ($http,$q) { 
}); 

angular 
.module('Admin') 
.controller('qrcodeCtrl',function($scope,qrcodeservice,statusservice){ 
});