AngularJS 异步解决实现方法

前端之家收集整理的这篇文章主要介绍了AngularJS 异步解决实现方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

AngularJS 异步解决实现方法

Angular 的异步处理的真的很不错。基于消息广播的方式,并且可以向上传递,基本上解决了不同模块,不同controller之间不方便异步的问题。

场景一:通过回调函数进行异步操作(该情况下不用消息广播的机制)

这种情况的特点是直接传递一个回调函数给异步操作就可以了,等异步操作完执行回调。

比如:controller通过server异步取数据,等取完数据进行一系列的操作,这个时候就可以把操作封装到函数中,传递给异步操作函数

controller代码片段举例如下:

最后一个参数即为回调函数

server代码片段举例如下:

调用回调方法 fn(data[0]); } }) .error(function(data,header,config,status){ alert("验证服务请求失败!"); }); } }

场景二:没有传递回调函数的地方,这个时候就必须用到消息广播的机制。

比如:我的controller通过server异步获取数据,这个时候我用回调函数保证取到数据后做后续操作。但是我的后续操作需要通过指令进行DOM的生成。这个时候我们是没有办法直接调用指令的link或者compile的。这个时候我们需要用到广播$scope.$broadcast。发送广播以后,需要通过$scope.$on进行监听。

controller代码片段举例如下:

service代码片段举例如下:

initCategory:function(loginname,fn){
this.http({
url:'../../scripts/mainModule/services/mainCategory.js',method:'GET'
}).success(function(data,status){
fn(data);
}).error(function(data,status){
alert("验证服务请求失败!");
});
}

directive代码片段举例如下:

获取的数据 } }

最后,如果我们在这个controller中需要调用另外一个模块的指令的link或者compile或者另一个模块的controller怎么办。我们需要通过依赖注入$rootScope服务,因为他是所有作用域的父,然后调用$emit这个服务进行广播。指令中通过$rootScope.$on进行接收即可。

模块1(app.video)中的controller代码片段举例如下:

模块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
});
};

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持

猜你在找的JavaScript相关文章