Javascript 角引导抛出错误

Javascript 角引导抛出错误,javascript,angularjs,Javascript,Angularjs,我正在尝试将我的网站迁移到有角度但速度较慢的位置。当前的情况是,我有一个普通的HTML登录页面,其中有一个打开忘记密码弹出窗口的链接。我已将忘记密码页面迁移到Angular。因此,当用户单击链接时,我通过$.getscript加载angular库、控制器和应用程序,然后执行AJAX调用,在弹出窗口中加载ForgetPassword页面内容。我可以在控制台中看到每个东西都已预先加载,但当我尝试引导时会出现错误。请在下面找到我的JS代码。我在控制台中遇到的错误是“ReferenceError:ang

我正在尝试将我的网站迁移到有角度但速度较慢的位置。当前的情况是,我有一个普通的HTML登录页面,其中有一个打开忘记密码弹出窗口的链接。我已将忘记密码页面迁移到Angular。因此,当用户单击链接时,我通过$.getscript加载angular库、控制器和应用程序,然后执行AJAX调用,在弹出窗口中加载ForgetPassword页面内容。我可以在控制台中看到每个东西都已预先加载,但当我尝试引导时会出现错误。请在下面找到我的JS代码。我在控制台中遇到的错误是“ReferenceError:angular未定义angular.bootstrap(文档,['myApp'])

$(文档).ready(函数(){
$(“#互补导航ul li a#弹出窗口”).bind(“单击”,函数(){
加载文件(函数(){
OpenPopup();
引导(文档,['myApp']);
});
});
});
//要在弹出窗口中打开的代码
函数加载文件(回调){
var scripts=['/js/angular.min.1.2.9.js'、'/js/Controller.js'、'/js/application.js'];
对于(var i=0;i
忘记密码的HTML如下所示

    <div ng-controller="ForgotPasswordController" id="lostPasswwordOverlayContent" class="overlayContent">

<p>
    <label>E-Mail<span class="mandatory">*</span></label>
    <input type="email" ng-class="{'input-error':(_ServerForm.email.$dirty && _ServerForm.email.$error.emailValidate) || (blankSubmit && _ServerForm.email.$invalid)}" ng-model="user.email" email-validate required name="email" placeholder="" maxlength="100" id="EmailAddress" />
    <span class="ui-state-error h5-message" ng-show="(_ServerForm.email.$dirty && _ServerForm.email.$error.emailValidate) || (blankSubmit && _ServerForm.email.$invalid)">
        <span class="h5-arrow"></span>
        <span class="h5-content">Invalid Email</span>
    </span>
</p>

<div class="button buttonSimple buttonRight greenbutton forgotpassword">
    <a name="fgtpassword" id="fgtpassword" href="#" class="" ng-click="submitform($event)"><span>Submit<span class="visual"></span></span></a>
</div>


电子邮件*
无效电子邮件


我已经分别为此页面测试了功能,如果打开一个独立的HTML页面,它可以正常工作,而当我尝试进行更改并将其作为弹出窗口打开时,我遇到错误

我从未使用过
$.getScript()
,但根据默认设置,您可以在脚本到达并已执行时提供回调。那你为什么不自己回电话呢

function loadfiles(callback) {
    var scripts = ['/js/angular.min.1.2.9.js', '/js/Controller.js', '/js/application.js'];
    var scriptsAlreadyFetched = scripts.length;
    for (var i = 0; i < scripts.length; i++) {
        $.getScript(scripts[i], function () {
          scriptsAlreadyFetched--;
          if (typeof callback === "function" && scriptsAlreadyFetched== 0) {
            callback();
          }
        });
    }
}
函数加载文件(回调){
var scripts=['/js/angular.min.1.2.9.js'、'/js/Controller.js'、'/js/application.js'];
var scriptsAlreadyFetched=scripts.length;
对于(var i=0;i
@meilke是的,这个解决方案对我有效。但我找到了另一种方法。 我使用Modernizer方法加载JS文件。通过这种方法,我还能够将CSS文件与JS文件一起加载

     $("#complementary-nav ul li a#popup").bind("click", function () {
            loadfiles(function () {
                angular.bootstrap(document, ['myApp']);
            });
        });

     function loadfiles(callback) {
      var modernizrLoad = [{ load: ['//code.angularjs.org/1.2.8/angular.min.js', '/js/application.js', '/js/Controller.js', '/css/Styles_v2.css', '/css/tyles.css'], complete: function () { OpenPopup(callback); } }];
      Modernizr.load(modernizrLoad);
    }

您的回调处理程序在加载脚本之前执行,因此您需要使用jquery的getScript回调处理程序来执行您自己的回调。@Nicolaeliu您能帮我提供一个相同的代码段吗。我实际上在firebug中放置了一个断点来检查相同的情况。我在控制台中看到文件首先被加载,但这可能只是因为我在@meilke的回答中使用loadfiles函数放置了断点try。我也在做同样的事情,如果你看到的话,只是我没有在for循环中做。我在for循环结束后立即执行此操作,但此时,您对脚本的请求尚未完成!使用
getScript
callback参数等待接收和评估脚本。是的,我根据您的代码片段更改了逻辑,但问题仍然存在。我仍然收到相同的错误“angular未定义”online“angular.bootstrap(文档,['tbs-lybc']);“您调试过吗?正在加载文件吗?有人叫你回来吗?您是否重命名了Angular源文件(因为它不是标准源文件名)?在a中尝试过,您是对的!我用修正更新了我的答案。
     $("#complementary-nav ul li a#popup").bind("click", function () {
            loadfiles(function () {
                angular.bootstrap(document, ['myApp']);
            });
        });

     function loadfiles(callback) {
      var modernizrLoad = [{ load: ['//code.angularjs.org/1.2.8/angular.min.js', '/js/application.js', '/js/Controller.js', '/css/Styles_v2.css', '/css/tyles.css'], complete: function () { OpenPopup(callback); } }];
      Modernizr.load(modernizrLoad);
    }