我试着访问我的$ 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
}
假设$ 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。 (这超出了这个问题的范围,我们需要更多细节来确定最佳实施方案)。