嘿我只是在有2 $broadcast
事件时才尝试执行一部分代码,这就是我得到的。
在我的控制器中我有这个。
$rootScope.$broadcast('receivedData');
在我的controller2中
$rootScope.$broadcast('dataLoaded');
到目前为止,我有这个。
$rootScope.$on('dataLoaded',function(){
$http({
url:"http://api/data",
method:"POST",
data:{id_cliente: parseInt(getVariable("id"))},
headers:{
"Content-Type":"application/json;charset=utf-8",
"Authorization" : "Bearer " + getVariable("token")
}
})
.then(function(response){
setVariable("contratos", JSON.stringify(response.data));
$rootScope.$broadcast("cargaContratos");
},
function(response){
});
})
只有在recievedData
和dataLoaded
被触发时我才能执行此操作。有谁知道怎么做?
答案 0 :(得分:2)
也许你可以这样做:
var received = [];
$rootScope.$on('receivedData', function() {
received.push('receivedData');
doSomething();
})
$rootScope.$on('dataLoaded', function() {
received.push('dataLoaded');
doSomething();
})
doSomething() {
if (received.indexOf('receivedData') > -1 && received.indexOf('dataLoaded') > -1) {
// Your code here
}
}
我建议使用服务/承诺,AngularJS默认包含一个promise库:$q。然后,您只需使用$q.all()
即可。但是现在,这应该可以正常工作。
实际上,您已经使用了一个承诺($http
),它允许使用then()
进行回调。
这是一个简单的承诺设置的(copy-pastable)示例。你应该尝试一下:
服务:
app.service('promiseTest', function($q) {
this.myPromise = function() {
return $q(function(resolve, reject) {
setTimeout(function() {
resolve('hello!');
}, 1000);
});
}
})
组件/控制器:
app.controller('promiseTestCtrl', function(promiseTest) {
promiseTest.myPromise().then(function(msg) {
console.log(msg)
})
})
我建议和他们一起玩,更好地了解他们。
当两个调用都转换为promise时,您可以使用:
var promises = [myService.receivedData, myService.dataLoaded];
$q.all(promises).then(function() {
// Your code
})