AngularJS 异步解决实现方法
发布时间 - 2026-01-11 01:50:43 点击率:次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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何处理表单验证?(Requests代码示例)
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
免费视频制作网站,更新又快又好的免费电影网站?
在Oracle关闭情况下如何修改spfile的参数
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
网站制作报价单模板图片,小松挖机官方网站报价?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
JS实现鼠标移上去显示图片或微信二维码
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Java解压缩zip - 解压缩多个文件或文件夹实例
EditPlus中的正则表达式 实战(4)
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
高防服务器:AI智能防御DDoS攻击与数据安全保障
JavaScript如何实现倒计时_时间函数如何精确控制
如何快速搭建高效WAP手机网站吸引移动用户?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
如何在Windows服务器上快速搭建网站?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
企业网站制作这些问题要关注
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
如何获取PHP WAP自助建站系统源码?
如何在阿里云虚拟服务器快速搭建网站?
iOS中将个别页面强制横屏其他页面竖屏
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
如何在Windows虚拟主机上快速搭建网站?
Laravel如何创建自定义中间件?(Middleware代码示例)
如何快速搭建高效简练网站?
如何快速搭建FTP站点实现文件共享?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何快速配置高效服务器建站软件?
如何在云主机上快速搭建网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel如何实现模型的全局作用域?(Global Scope示例)
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何挑选优质建站一级代理提升网站排名?
如何在阿里云购买域名并搭建网站?
如何快速启动建站代理加盟业务?
下一篇:【Linux】进程信号的产生
下一篇:【Linux】进程信号的产生

