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,但仍然循環的時間間隔。並且該視圖不呈現登錄成功。
我正在學習棱角幾天,有人可以告訴我爲什麼會發生?
什麼是'self'財產申報?爲什麼它'php'的擴展?你爲什麼不使用角度的'$ interval'服務? – devqon
對不起,php擴展是編碼問題時的錯。並且'self'的使用是我從Internate中搜索的結果,我發現它既可以使用'self.setInterval()'或'window.setInterval()',也可以使用'setInterval()'仍然有效。 Finnaly,因爲你提到'$ interval'服務,我現在就試試看。 – digjack