2017-03-15 99 views
-2

我使用第三方JavaScript应用程序的一个函数,我在我的AngularJS工厂之一中包含并调用该函数。该函数的一个参数是DOM元素的id,因为该函数操纵此元素。AngularJS:通过getElementById找不到的元素

ThirdPartyApp.doSomething("#elementId").then(function (success) { 

        }, function (error) { 

        }); 

但我得到的错误:无法获取元素与ID ...

我假定应用程序使用document.getElementById因为我试图手动调用它,但它甚至没有找到元素尽管它根据浏览器的DOM浏览器存在。

带id的元素位于我通过ng-include包含的HTML页面中。

我如何在我的AngularJS环境中解决这个问题,因为我无法改变第三方应用程序的工作方式?

更多信息

这里是元素的HTML页面:

<div> 
    <iframe id='testId' ng-src='{{test}}' style='overflow: hidden;' /> 
</div> 

这里是我有这个HTML页面:

<ng-include src="'/views/shared/test.html'"></ng-include> 

为什么在AngularJS document.getElementById("testId")工厂没有找到iframe元素?

+1

你有没有尝试过传入elementId而没有'#'? –

+0

@DanielBernsons是的。相同的结果 – Palmi

+0

在这种情况下,如果您不知道您正在使用什么第三方应用程序,或者您的HTML代码是什么样的,就不可能提供任何有用的帮助。 –

回答

1

因为我看不到您正在使用的第三方库的源代码,所以很难确切地说明可能发生了什么。

但是,我的猜测是,当您拨打电话以获取iframe元素时,您添加的模板ng-include尚未完成加载内容。

为了验证这一点,试图通过添加以下到您的AngularJS控制器获得元素:

$scope.$on('$includeContentLoaded', function() { 
    var myTest = document.getElementById("testId"); 
}); 

的代码块将等待你的“NG-包括”内容来呈现。

+0

对不起。错字。它实际上是在AngularJS工厂。我尝试以下方法:$ rootScope。$ on('$ includeContentLoaded',function(){ var myTest = document.getElementById(“sketch”); });但是这个功能从来没有被调用。 – Palmi

+0

您的工厂完全不了解您的模板。这是**需要在控制器中的逻辑。 –