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 }); };
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]