[英]Make a scope inside a function global
我試圖訪問我的$ rootScope.newBloodneed,但是我無法在函數外部訪問它,我嘗試了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
在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。 (這超出了這個問題的范圍,我們需要更多細節來確定最佳實施方案)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.