调用超过 1 个 $rootScope.$on
Call more than 1 $rootScope.$on
嘿,我试图仅在有 2 个 $broadcast
事件时才执行一部分代码,这就是我得到的结果。
在我的 controller1 中有这个。
$rootScope.$broadcast('receivedData');
在我的控制器2
$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
时我才必须执行此操作。有人知道怎么做吗?
也许你可以这样做:
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
}
}
不过我建议使用 services/promises,AngularJS 默认包含一个 promise 库:$q。然后,您可以简单地使用 $q.all()
。但就目前而言,这应该可以正常工作。
更新(承诺示例)
实际上,您已经使用了 promise ($http
),它启用了 then()
的回调。
这是一个简单的 promise 设置示例(可复制粘贴)。你应该试试看:
服务:
app.service('promiseTest', function($q) {
this.myPromise = function() {
return $q(function(resolve, reject) {
setTimeout(function() {
resolve('hello!');
}, 1000);
});
}
})
Component/Controller:
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
})
嘿,我试图仅在有 2 个 $broadcast
事件时才执行一部分代码,这就是我得到的结果。
在我的 controller1 中有这个。
$rootScope.$broadcast('receivedData');
在我的控制器2
$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
时我才必须执行此操作。有人知道怎么做吗?
也许你可以这样做:
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
}
}
不过我建议使用 services/promises,AngularJS 默认包含一个 promise 库:$q。然后,您可以简单地使用 $q.all()
。但就目前而言,这应该可以正常工作。
更新(承诺示例)
实际上,您已经使用了 promise ($http
),它启用了 then()
的回调。
这是一个简单的 promise 设置示例(可复制粘贴)。你应该试试看:
服务:
app.service('promiseTest', function($q) {
this.myPromise = function() {
return $q(function(resolve, reject) {
setTimeout(function() {
resolve('hello!');
}, 1000);
});
}
})
Component/Controller:
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
})