我希望在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
为什么它不起作用?我该如何解决?
答案 0 :(得分:3)
moduleName.requires
没有记录,很难理解和used only by Angular injector。反过来,在引导期间(通过ng-app
或angular.bootstrap
)或使用angular.injector
创建新的注入器来调用注入器。
一旦应用程序被引导并且配置/运行阶段结束,就无法调用新的配置/运行块。同样关注moduleName.directive
,moduleName.controller
和其他模块方法,所有这些都应该在应用程序引导之前调用。因此,它们不适合异步定义模块。
新定义的运行块可以调用by creating an injector explicitly(这意味着创建了一个新的应用实例):
var newApp = angular.injector(['app.main']);
它的主要用途是测试,它在生产中的应用有限 - 新实例化的应用程序及其服务无法与自举应用程序通信,因为服务单例不同。
Angular中有一些延迟加载的解决方案,最全面的是ocLazyLoad。