2016-09-20 41 views
1

我正在使用包含控制器和服務的角度項目。問題從以下代碼出來:在調用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

回答

0

您的模塊聲明和使用是不正確

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){ 
});