所以,我有一个与salesforce集成的角度代码。它会对salesforce进行休息调用以获取一些记录。
现在在休息调用的sucess处理程序中,我试图用一个seprate控制器打开一个新的div,我得到错误:
TypeError:无法调用null
的方法'addEventListener'如果我尝试从成功处理程序外部调用它,我不会收到此错误。但是由于我的数据在我的成功处理程序中被查询,我需要在那里使用它。
这是我的代码:
filterservice.getproductlist(successHandler,errorHandler);
function successHandler(data) {
$scope.$apply(function () {
defer.resolve(data);
});
}
defer.promise.then(function(data){
console.log('In not');
filterservice.setproductlist(data);
}).then(function(){
console.log('open then');
$scope.opendetailwindow(
'sellingAreas/sellingAreasFilters/selectProducts.tpl.html',
'showProducts');
});
答案 0 :(得分:0)
这意味着您找不到附加事件的元素。
考虑这个jquery:
$('.something').on('click', doSomeCallback );
此代码将返回一个数组,对于每个数组项,它将应用doSomeCallback
作为回调函数。这就是当数组的长度为零时,jquery如何保护代码编写器不会出现空错误。
在纯JavaScript中,你会说这样的话:
var element = document.getElementById('someElement');
element.addEventListener('click', doSomeCallback);
但如果找不到element
,则element
将等于null
,后者没有属性或类方法......其中一个将是addEventListener
。
在您的代码中,您使用的是defer
,这可能是基于javascript中的addEventListener
方法构建的。
因此,您附加的defer
事件/方法所附带的元素并不总是在DOM中找到。因此,请确保找出未找到该元素的原因,这将阻止您发生该错误。