2016-01-25 31 views
0

我正在編寫一個AngularJS Web應用程序,並且具有需要調用作用域內部函數的任何作用域之外的函數。我打電話給該功能,並按照this的答案給出答案。

function returnDest(callback) { 
$(document).ready(angular.element(document.getElementById('body')).scope().getTask(function() { 
    if(callback) { 
     callback(locationInfo); 
    } 
})); 
} 

它經常使用,但有時函數沒有成功運行。調試器給我:

Uncaught TypeError: Cannot read property 'getTask' of undefined 

我不知道爲什麼功能正在對不確定的調用時的$(document)。就緒應有的DOM已經被加載後,才火的功能。如果我使用$(window).load(),則彈出相同的錯誤。我能做些什麼來確保此功能成功運行?

作爲參考,這裏是在HTML文件中的行,其中所述「體」元素被定義

<body style="background-color:#e6e8f3" ng-app="app" ng-controller="controller" id="body"> 
+3

,是不是你如何使用準備......它需要一個功能,你只要在它運行的JavaScript ... – epascarello

+0

出於好奇...你在哪裏使用這個代碼? – charlietfl

回答

0

您使用.ready不正確。在DOM準備就緒之前,您撥打returnDest的那一刻就會嘗試獲取ID爲body的元素。由於未加載,因此無法訪問body。相反,省略了body ID,並使用它像這樣:

function returnDest(callback) { 
    $(document).ready(function() { 
    angular.element(document.body).scope().getTask(function() { 
     if (callback) { 
     callback(locationInfo); // Not sure where locationInfo is coming from 
     } 
    }); 
    }); 
} 
+0

奇妙的是,這完美的工作,我需要什麼。嘗試進一步瞭解這一點,我明白,我發佈的代碼不起作用的主要原因是因爲我沒有將調用包裝到函數中的getTask。是否使用document.body或document.getElementById('body')有什麼區別? – jcharch

+0

@jcharch唯一真正的區別是你不必給身體一個身份證,而且寫的時間也更短;) –

0

angular.element返回一個jQuery對象。

ready()預計您通過它的參數是函數它將在文檔準備就緒時調用。

這聽起來像你需要用你想傳遞給readyfunction() { ... }一切。

2

$(document).ready應該是外面的功能:

$(document).ready(function returnDest(callback) { 
angular.element(document.getElementById('body')).scope().getTask(function() { 
    if(callback) { 
     callback(locationInfo); 
    } 
})}); 
+0

改變'returnDest'的範圍,,,,懷疑是有意的。 – charlietfl

相關問題