$ document.context.addEventListener上的AngularJS未定义错误

时间:2015-02-04 23:53:36

标签: angularjs cordova opentok tokbox

我有以下角度服务:

.factory("OTReady", ['$document', function ($document) {
  var ready = false;
  $document.context.addEventListener('deviceReady', function () {
    ready = true;
  });

  return (function(fn){
    if (ready) {
      fn();
    } else {
      $document.context.addEventListener('deviceReady', fn);
    }
  });
}])

这是回归"未定义"。它是来自Cordova的opentok-angular library的片段。

此代码块中提供了许多其他$ document属性。为什么这会回来" undefined" ?

2 个答案:

答案 0 :(得分:1)

我遇到了一个类似的问题,我的angular linter不赞成document.addEventListener,并且告诉我使用像您的初始服务一样的angular $ document服务。但是,只需将document.addEventListener切换为$document.addEventListener返回undefined。通过打印到控制台,我发现$document是一个数组。不确定这是否有意,但将$document.addEventListener更改为$document[0].addEventListener对我有用。

所以你的新服务看起来像这样:

.factory("OTReady", ['$document', function ($document) {
  var ready = false;
  $document[0].addEventListener('deviceReady', function () {
    ready = true;
  });

  return (function(fn){
    if (ready) {
      fn();
    } else {
      $document[0].addEventListener('deviceReady', fn);
    }
  });
}])

其他人应该阐明为什么这样设置。除非您可能有多个文档对象,否则数组没有多大意义。

答案 1 :(得分:0)

这解决了我:

document.addEventListener('deviceReady', fn);

我读到jQuery已经弃用了context,但我认为这不是问题。