AngularJS指令中的回调问题
callback issue in angularjs directive
我在调用服务函数时遇到回调问题
这是我在registrationService
中定义的函数
function hasUserAccessToLevel(incentiveLevel, callback, showRegistrationView) {
var url = "...";
httpWrapperService.get(url)
.then(
function success(data) {
var hasAccess = incentiveLevel <= data.Level;
callback(hasAccess);
if (showRegistrationView && hasAccess == false) {
showRegistrationViewForLevel(incentiveLevel);
}
},
function error(errorObject) {
alert("User has not access'r'nTODO : show popup for registration/login");
}
);
return false;
}
在我的指令中,我将此功能用作
function checkAuthentication() {
registrationService.hasUserAccessToLevel(2, function (hasAccess) {
if (hasAccess == false){
return false;
}
else{
return true;
}
});
}
function loadDocuments() {
var target=checkAuthentication()
if(target)
{
//load both private and public
}
else
{
// load only public
}
}
现在我面临的问题是,我有另一个函数loaDocuments
,当用户登录时,它应该进入if(target)
块,但是当我调试函数时,它说目标未定义,因此控件将转到其他部分,这是错误的。我知道有一些回调问题,但不知道如何纠正它。
任何帮助都是可以接受的。谢谢
您应使用$q服务。 checkAuthentication()
返回undefined
hasUserAccessToLevel()
因为它是异步的,并且在调用时没有返回值。解决方案是返回promise
对象。
你可以这样写代码:
function checkAuthentication() {
var defer = $q.defer();
registrationService.hasUserAccessToLevel(2, function (hasAccess) {
defer.resolve(hasAccess);
}, function () {
defer.reject();
});
return defer.promise;
}
function loadDocuments() {
checkAuthentication().then(function (target) {
if (target) {
//load both private and public
}
else {
// load only public
}
});
}
相关文章:
- Meteor:异步回调问题
- 请求js中的回调问题
- JavaScript回调问题
- node.js+MySQL;JSON结果-回调问题&没有响应客户端
- Google+登录JavaScript回调问题
- 用于循环回调问题的 Nodej
- 删除 ajax 回调问题
- Javascript 的新手 - 回调问题
- API JSON 回调问题
- 猫鼬查找()回调问题
- AngularJS指令中的回调问题
- 将Android网络视图渲染为位图,html5 javascript,回调问题
- 跨域Ajax(JSONP)回调问题
- JavaScript中的回调问题
- Angular Material md联系芯片回调问题
- Node.js mongodb回调问题
- Node.js回调问题
- Jquery临时回调问题- $.提示失败
- 数据源查询回调问题(调用顺序,改变全局变量的能力)
- 绝妙的jQuery颜色选择器回调问题