AngularJS在引导后添加依赖项

时间:2015-09-01 06:00:29

标签: javascript angularjs dependency-injection bootstrapping

我希望在AngularJS引导后添加依赖项。我尝试按照此帖(re-open and add dependencies to an already bootstrapped application)中的建议通过 S-n Act-1 Date-1 Task-1 ...... ....... ....... ....... S-n Act-n Date-n Task-n 进行操作。但是,它不起作用。

这是我的示例代码:

的index.html

app.requires.push('app.main');

的script.js

<!DOCTYPE html>
<html ng-app="app">

  <head>
    <link rel="stylesheet" href="style.css">
    <script type="text/javascript" src="https://code.angularjs.org/1.4.3/angular.min.js"></script>
    <script src="script.js"></script>

  </head>
  <body>
    <h1>Hello Plunker!</h1>
  </body>

</html>

script2.js

   var app = angular
    .module('app',[])
    .run(function($http){
            $http.get("script2.js").success(function(data){
                eval(data);
                //app.requires.push('app.main');
            }).error(function(){
              alert("error");
          });
    });

http://plnkr.co/edit/gN2kkoyqamB4OANXMUjA

为什么它不起作用?我该如何解决?

1 个答案:

答案 0 :(得分:3)

moduleName.requires没有记录,很难理解和used only by Angular injector。反过来,在引导期间(通过ng-appangular.bootstrap)或使用angular.injector创建新的注入器来调用注入器。

一旦应用程序被引导并且配置/运行阶段结束,就无法调用新的配置/运行块。同样关注moduleName.directivemoduleName.controller和其他模块方法,所有这些都应该在应用程序引导之前调用。因此,它们不适合异步定义模块。

新定义的运行块可以调用by creating an injector explicitly(这意味着创建了一个新的应用实例):

var newApp = angular.injector(['app.main']);

它的主要用途是测试,它在生产中的应用有限 - 新实例化的应用程序及其服务无法与自举应用程序通信,因为服务单例不同。

Angular中有一些延迟加载的解决方案,最全面的是ocLazyLoad