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主题设置教程  如何挑选优质建站一级代理提升网站排名?  如何在阿里云购买域名并搭建网站?  如何快速启动建站代理加盟业务?