使函数内的范围成为全局范围
Make a scope inside a function global
我正在尝试访问我的 $rootScope.newBloodneeded 但我无法在函数外部访问它,我尝试了 rootscope 所以我可以将其称为全局但它仍然给我未定义
.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
不一定写完。您在 then
中设置 $rootScope.newBloodneeded
,它在 getBloodRequest
解析后仅 运行,这可能在您的控制台日志完成后很远很远。
Bloodrequest.getBloodrequest($routeParams.id).then(function(data) {
...
$rootScope.newBloodneeded = $scope.newBloodneeded;
...
您可以尝试的一个有趣的测试是将控制台日志包装在 setTimeout
很长一段时间(当您 guaranteed/sure 时 getBloodRequest
已经完成)。这应该向您证明时间是问题,而不是函数范围。
基本上:
setTimeout(() => console.log($rootScope.newBloodneeded), 10000000000) // or whatever timing guarantees completion
这里的解决方案是在 .then
中链接任何需要 $rootScope.newBloodneeded
的逻辑。如果这不起作用,您可能想要创建一个可以从其他地方访问的 Promise。 (这超出了这个问题的范围,我们需要更多细节来找出最佳实施方式)。
我正在尝试访问我的 $rootScope.newBloodneeded 但我无法在函数外部访问它,我尝试了 rootscope 所以我可以将其称为全局但它仍然给我未定义
.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
不一定写完。您在 then
中设置 $rootScope.newBloodneeded
,它在 getBloodRequest
解析后仅 运行,这可能在您的控制台日志完成后很远很远。
Bloodrequest.getBloodrequest($routeParams.id).then(function(data) {
...
$rootScope.newBloodneeded = $scope.newBloodneeded;
...
您可以尝试的一个有趣的测试是将控制台日志包装在 setTimeout
很长一段时间(当您 guaranteed/sure 时 getBloodRequest
已经完成)。这应该向您证明时间是问题,而不是函数范围。
基本上:
setTimeout(() => console.log($rootScope.newBloodneeded), 10000000000) // or whatever timing guarantees completion
这里的解决方案是在 .then
中链接任何需要 $rootScope.newBloodneeded
的逻辑。如果这不起作用,您可能想要创建一个可以从其他地方访问的 Promise。 (这超出了这个问题的范围,我们需要更多细节来找出最佳实施方式)。