如果将包含控制器代码的javaScript动态添加到HTML dom,则控制器不加载

时间:2016-10-24 05:22:49

标签: javascript html angularjs

以下是一个示例代码: 我在html正文的末尾有以下代码

<script type="text/javascript">
    var js = document.createElement("script");
    js.src = "forms/dynamicForms/sampleFormController.js";
    document.body.appendChild(js);
    angular.bootstrap(document, ['MyApp']);
</script>

当我运行我的应用程序时,找不到sampleFormController,如果我在Chrome中检查body标签,脚本会作为子标签添加到body标签。

当我修改代码并添加超时时,它可以正常工作

<script type="text/javascript">
    var js = document.createElement("script");
    js.src = "forms/dynamicForms/sampleFormController.js";
    document.body.appendChild(js);
    setTimeout(myFunction, 2000);
    function myFunction() {
    angular.element(function() {
        angular.bootstrap(document, ['MyApp']);
      });
    }
</script>

有没有办法让我的第一个代码在没有添加超时的情况下工作?

1 个答案:

答案 0 :(得分:2)

您可以将脚本标记的 onload 属性设置为myFunction()。有关详细信息,请参阅MDN page on HtmlScriptElement以及与下面修改后的代码段类似的示例。另外,请参阅this example plunker中使用的内容。

同样,您可以将 onerror 属性设置为函数,以便在发生错误时处理该情况。由于此代码是异步的,因此您可以使用Promises - 请参阅this example

<script type="text/javascript">
    var js = document.createElement("script");
    js.src = "http://elliott.andrewz.org/data/sampleController.js";
    document.body.appendChild(js);
    js.onload = myFunction;
    function myFunction() {
        angular.element(function() {
            angular.bootstrap(document, ['MyApp']);
      });
    }
</script>