我有一个现有的角度网络应用程序,它不使用require.js。我必须在现有应用程序中创建一个新的业务模块。我可以仅将require.js用于新模块吗?这样我就不必触及现有代码了?
现有的index.html如下所示:
<html>
<head>
...
</head>
<body>
...
<script src="http://cdn.gse.site/angular/1.2.9/angular.js"></script>
<script src="js/angular-ui-router.js"></script>
<script src="js/services/angDashboardService.js"></script>
<script src="js/controllers/angDashboardController.js"></script>
<--- More custom scripts here --->
</body>
</html>
我尝试在现有的index.html文件中包含require-main.js,而不删除任何现有的脚本标记。 require-main.js看起来像这样:
require.config({
baseUrl: 'js',
paths:{
'angular' : '...'
},
shim: {
'angular': {export: 'angular' },
'new-module': {
deps: ['angular'], export: 'new-module'
}
}
});
require(['new-module'], function(){});
我收到如下错误:
Uncaught Error: [ng:btstrpd] App Already Bootstrapped with this Element '<body class="preload ng-scope" ng-app="angDashboard">'
答案 0 :(得分:0)
我们可以在角度应用程序中使用requirejs来管理/模块化应用程序的一部分吗?
是的,你可以(但为什么......?)。如果你不知道你在做什么,那么你会受到一些严重的打击
无论如何,您必须完全理解angularJS
和requireJS
的概念。
<script src="http://cdn.gse.site/angular/1.2.9/angular.js"></script>
<script src="js/angular-ui-router.js"></script>
<script src="js/services/angDashboardService.js"></script>
<script src="js/controllers/angDashboardController.js"></script>
这意味着您已经有一个角度应用运行。所以你不会(不应该)使用requireJS
require.config({
baseUrl: 'js',
paths:{
'async-module' : '...'
},
// You won't use 'shim' with this structure
// shim: {}
});
<强> async-module.js
强>
// assuming somewhere you have did this
// var app = angular.module([...]);
//
// NOW you need to convert this 'app' to global variable. So you can use it it requirejs/define blocks
// window.app = angular.module([...]);
define(function(){
window.app.controller('asyncCtrl', function($scope){
// controller code goes here
});
});
然后在您的应用内某处,当您要加载此async-module
requirejs(['async-module'], function(){
console.log('asyncCtrl is loaded!');
});
可以做你所要求的但是效果不高。在代码管理方面会像地狱一样。