在调用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,但仍然循环的时间间隔。并且该视图不呈现登录成功。
我正在学习棱角几天,有人可以告诉我为什么会发生?
答
您的模块声明和使用是不正确
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){
});
什么是'self'财产申报?为什么它'php'的扩展?你为什么不使用角度的'$ interval'服务? – devqon
对不起,php扩展是编码问题时的错。并且'self'的使用是我从Internate中搜索的结果,我发现它既可以使用'self.setInterval()'或'window.setInterval()',也可以使用'setInterval()'仍然有效。 Finnaly,因为你提到'$ interval'服务,我现在就试试看。 – digjack