我遇到了JavaScript问题。我有一个在加载时使用EMIT功能的应用程序。但不幸的是,实现$rootScope.$on
的类可能尚未准备好。我的解决方法是使用超时但这个解决方案并不理想。还有其他解决方案吗?谢谢!
此功能:
$rootScope.$on('newPrintSelected', function (event, selectedPrinter) {
StorageModule.storage.find(collectionName, {_id : selectedPrinter.printer_hardware._id}, function(error, data){
if (error) { //Not Found
console.error("Ops. There is something wrong with this action...");
}else {
if(data[0].printOptions == null){
$scope.options = angular.copy($scope.default);
$scope.options.layerThickness = 30 - ($scope.options.layerThickness * 100);
$scope.persistedOptions = angular.copy($scope.default);
$scope.persistedOptions.layerThickness = 30 - ($scope.persistedOptions.layerThickness * 100);
}else{
data[0].printOptions.layerThickness = 30 - (data[0].printOptions.layerThickness * 100);
$scope.options = angular.copy(data[0].printOptions);
$scope.persistedOptions = angular.copy(data[0].printOptions);
}
}
$scope.selectedPrinterHardware = angular.copy(data[0]);
console.warn($scope.options);
$scope.$apply();
});
});
这个人没有打电话:
$scope.setPrinter = function (printer, callback) {
setTimeout(function(){ $rootScope.$emit('newPrintSelected', printer); }, 200);
}
}
在启动应用程序时,我必须将setTimeout用于此工作。
答案 0 :(得分:2)
您是否可以重新设计代码以使用返回您将使用emit发送的值的服务? (或履行所需价值的承诺)。
如果绝对没有办法可以更改生成发射的代码(我真的想不出有什么原因)那么你可以存储值并监听一个事件,比如'loaded',然后是$emit
。