在函数全局中创建一个范围

问题描述 投票:0回答:1

我试着访问我的$ rootScope.newBloodneeded但是我无法在函数外部访问它,我尝试了rootcope所以我可以将其称为全局但仍然它给了我undefined

.controller('editbloodrequestCtrl', function($scope,Bloodrequest,$rootScope,$routeParams) {
$rootScope.newBloodneeded;

Bloodrequest.getBloodrequest($routeParams.id).then(function(data) {
        if (data.data.success) {
            $scope.newBloodneeded = data.data.bloodrequest.blood_component;
            $rootScope.newBloodneeded = $scope.newBloodneeded;
            //gives me output when I console here
        } else {
            app.errorMsg = data.data.message; // Set error message
        }
    });

console.log($rootScope.newBloodneeded); //gives me undefined

}
javascript angularjs mean-stack
1个回答
0
投票

假设$ rootScope正常工作,这是异步性问题而非范围 - 当您尝试运行时:

console.log($rootScope.newBloodneeded); //gives me undefined

...getBloodRequest未必完成。你在$rootScope.newBloodneeded中设置了then,它只在getBloodRequest解析之后运行,这可能在你的控制台日志完成后很远很远。

Bloodrequest.getBloodrequest($routeParams.id).then(function(data) {
            ...
            $rootScope.newBloodneeded = $scope.newBloodneeded;
            ...

您可以尝试的一个有趣的测试是将该控制台日志包装在setTimeout中一段时间​​(当您保证/确定getBloodRequest已完成时)。那应该向你证明时间是问题,而不是功能范围。

基本上:

setTimeout(() => console.log($rootScope.newBloodneeded), 10000000000) // or whatever timing guarantees completion

这里的解决方案是链接$rootScope.newBloodneeded中需要.then的任何逻辑。如果这不起作用,您可能想要创建一个从其他地方访问的Promise。 (这超出了这个问题的范围,我们需要更多细节来确定最佳实施方案)。

© www.soinside.com 2019 - 2024. All rights reserved.