我正在编写一个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).ready在加载DOM之后才应该触发函数时,为什么函数被调用undefined。如果我使用$(window).load(),则会弹出相同的错误。我该怎么做才能确保此功能成功运行?
作为参考,这里是HTML文件中定义'body'元素的行
<body style="background-color:#e6e8f3" ng-app="app" ng-controller="controller" id="body">
答案 0 :(得分:2)
$(document).ready
应该在你的职能范围之外:
$(document).ready(function returnDest(callback) {
angular.element(document.getElementById('body')).scope().getTask(function() {
if(callback) {
callback(locationInfo);
}
})});
答案 1 :(得分:0)
angular.element
返回一个jQuery对象。
ready()
期望您传递的参数为函数,它将在文档准备就绪时调用。
听起来你需要将你想要传递的所有内容包裹在ready
中的function () { ... }
。
答案 2 :(得分: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
}
});
});
}