Javascript Emit在$ rootScope之前调用。$ on已准备就绪

时间:2016-06-06 14:40:05

标签: javascript angularjs

我遇到了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用于此工作。

1 个答案:

答案 0 :(得分:2)

您是否可以重新设计代码以使用返回您将使用emit发送的值的服务? (或履行所需价值的承诺)。

如果绝对没有办法可以更改生成发射的代码(我真的想不出有什么原因)那么你可以存储值并监听一个事件,比如'loaded',然后是$emit