Angular Js:TypeError:无法调用null的方法'addEventListener'

时间:2013-09-09 17:13:07

标签: rest salesforce

所以,我有一个与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');
});

1 个答案:

答案 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中找到。因此,请确保找出未找到该元素的原因,这将阻止您发生该错误。