簡體   English   中英

使函數內部的作用域成為全局

[英]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.newBloodneededgetBloodRequestgetBloodRequest結束后運行,這可能在你的控制台日志完成后很遠很遠。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM