AngularJS 异步解决实现方法

Angular 的异步处理的真的很不错。基于消息广播的方式,并且可以向上传递,基本上解决了不同模块,不同controller之间不方便异步的问题。
场景一:通过回调函数进行异步操作(该情况下不用消息广播的机制)
这种情况的特点是直接传递一个回调函数给异步操作就可以了,等异步操作完执行回调。
比如:controller通过server异步取数据,等取完数据进行一系列的操作,这个时候就可以把操作封装到函数中,传递给异步操作函数。
controller代码片段举例如下:
$scope.submit=function(){
userService.login($scope.user.loginname.value,$scope.user.password.value,function(data){
if(data.success){
location.href = '../../views/main/index.html';
}else{
$scope.user.error.tip=data.msg;
}
});
};
最后一个参数即为回调函数
server代码片段举例如下:
return {
http:$http,
token:'',
auth:[],
loginname:'',
login:function(loginname,password,fn){
this.http({
url:'../../scripts/loginModule/services/loginOKTest.js',
method:'GET'
})
.success(function(data){
if(data[0].success){
...
//调用回调方法
fn(data[0]);
}
})
.error(function(data,header,config,status){
alert("验证服务请求失败!");
});
}
}
场景二:没有传递回调函数的地方,这个时候就必须用到消息广播的机制。
比如:我的controller通过server异步获取数据,这个时候我用回调函数保证取到数据后做后续操作。但是我的后续操作需要通过指令进行DOM的生成。这个时候我们是没有办法直接调用指令的link或者compile的。这个时候我们需要用到广播$scope.$broadcast。发送广播以后,需要通过$scope.$on进行监听。
controller代码片段举例如下:
//通过categoryService异步取数据
categoryService.initCategory(loginname,token,function(category){
$scope.category=category;
$scope.$broadcast("categoryLoaded");
});
service代码片段举例如下:
initCategory:function(loginname,token,fn){
this.http({
url:'../../scripts/mainModule/services/mainCategory.js',
method:'GET'
}).success(function(data,header,config,status){
fn(data);
}).error(function(data,header,config,status){
alert("验证服务请求失败!");
});
}
directive代码片段举例如下:
link:function ($scope, $elem, attrs) {
$scope.$on("categoryLoaded", function (event, args) {
//$scope.category即为异步获取的数据
}
}
最后,如果我们在这个controller中需要调用另外一个模块的指令的link或者compile或者另一个模块的controller怎么办。我们需要通过依赖注入$rootScope服务,因为他是所有作用域的父,然后调用$emit这个服务进行广播。指令中通过$rootScope.$on进行接收即可。
模块1(app.video)中的controller代码片段举例如下:
$scope.replay=function(id){
console.log("click replay id:"+id);
clearReply();
//通过$rootScope广播消息给app.dialog模块的controller
$rootScope.$emit("openTemplate","reply.html");
};
模块2(app.dialog)中的controller代码片段举例如下:
$rootScope.$on('openTemplate',function(event, toState, toParams, fromState, fromParams){
$scope.openTemplate(toState);
});
$scope.openTemplate = function (url) {
if(!url)
url="/ZVideo-MVC/dialog/defaultTemplate.html";
$scope.value = true;
ngDialog.open({
template: url,
className: 'ngdialog-theme-plain',
scope: $scope
});
};
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# AngularJS
# 异步
# angular
# 异步的实例
# 详解angularjs利用ui-route异步加载组件
# AngularJS出现$http异步后台无法获取请求参数问题的解决方法
# AngularJS 实现按需异步加载实例代码
# angularjs 处理多个异步请求方法汇总
# 回调
# 这个时候
# 即为
# 就可以
# 在这个
# 他是
# 我用
# 希望能
# 这种情况
# 没有办法
# 另外一个
# 谢谢大家
# 真的很不错
# 情况下
# 解决了
# 直接调用
# 就必须
# 特点是
# index
# return
相关文章:
建站主机SSH密钥生成步骤及常见问题解答?
C#如何在一个XML文件中查找并替换文本内容
免费视频制作网站,更新又快又好的免费电影网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何通过FTP空间快速搭建安全高效网站?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
建站之星如何优化SEO以实现高效排名?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Java解压缩zip - 解压缩多个文件或文件夹实例
音乐网站服务器如何优化API响应速度?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
黑客入侵网站服务器的常见手法有哪些?
微信小程序 五星评分(包括半颗星评分)实例代码
如何在阿里云虚拟服务器快速搭建网站?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
如何通过cPanel快速搭建网站?
建站之星免费版是否永久可用?
教程网站设计制作软件,怎么创建自己的一个网站?
金*站制作公司有哪些,金华教育集团官网?
如何在万网自助建站中设置域名及备案?
如何确认建站备案号应放置的具体位置?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何在Golang中使用replace替换模块_指定本地或远程路径
制作网站的基本流程,设计网站的软件是什么?
建站主机选哪种环境更利于SEO优化?
香港服务器如何优化才能显著提升网站加载速度?
常州企业网站制作公司,全国继续教育网怎么登录?
如何在西部数码注册域名并快速搭建网站?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
临沂网站制作企业,临沂第三中学官方网站?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何彻底卸载建站之星软件?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何在阿里云完成域名注册与建站?
郑州企业网站制作公司,郑州招聘网站有哪些?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
专业商城网站制作公司有哪些,pi商城官网是哪个?
西安专业网站制作公司有哪些,陕西省建行官方网站?
建站主机服务器选购指南:轻量应用与VPS配置解析
如何在Windows虚拟主机上快速搭建网站?
小程序网站制作需要准备什么资料,如何制作小程序?
建站之星如何修改网站生成路径?
高端企业智能建站程序:SEO优化与响应式模板定制开发
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
专业网站建设制作报价,网页设计制作要考什么证?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
*请认真填写需求信息,我们会在24小时内与您取得联系。