我正在尝试访问我的$rootScope.newBloodneeded,但是我不能在函数外部访问它,我尝试了根作用域,所以我可以调用它作为全局,但它仍然给我未定义
.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
}
发布于 2019-03-15 08:18:19
假设$rootScope工作正常,这是一个异步问题,而不是作用域问题-当您尝试运行:
console.log($rootScope.newBloodneeded); //gives me undefined
...getBloodRequest
不一定已经完成了。您可以在then
中设置$rootScope.newBloodneeded
,它只在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
这里的解决方案是在.then
中链接任何需要$rootScope.newBloodneeded
的逻辑。如果这不起作用,您可能希望创建一个可从其他地方访问的Promise。(这超出了这个问题的范围,我们需要更多细节来找出最好的实现)。
https://stackoverflow.com/questions/55173795
复制相似问题