0

我有以下角度服务:

.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 库的一个片段。

此代码块中提供了许多其他 $document 属性。为什么这会返回“未定义”?

4

2 回答 2

1

我遇到了一个类似的问题,我的 angular linter 不批准 document.addEventListener 并告诉我像您的初始服务一样使用 angular $document 服务。但是,只需切换document.addEventListener$document.addEventListener返回的未定义。通过打印到控制台,我发现$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);
    }
  });
}])

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

于 2016-03-18T15:16:24.140 回答
0

这为我解决了它:

document.addEventListener('deviceReady', fn);

我读到contextjQuery 已弃用它,但我认为这不是问题所在。

于 2015-02-05T13:28:42.017 回答