在我的 AngularJS 应用程序中,我正在尝试使用 grunt 和以下插件创建构建。
- grunt-contrib-clean
- grunt-contrib-requirejs
- 咕噜角模板
- 咕噜角复制
我能够使用所有 Javascript 代码(控制器等)成功创建 main.js 文件,并且还能够使用 ngtemplates 将部分附加到 main.js。
GruntFile.js
ngtemplates:{
options: {
append: true,
bootstrap: function(module, script) {
return 'require([\'angular\', \'app\'], function(angular, app) { app.run([\'$templateCache\', function($templateCache) {' + script + '}]); });';
}
},
app:{
cwd: 'app',
src: '*/partials/*.html',
dest: 'build/main.js'
}
},
requirejs: {
compile: {
options: {
baseUrl: './app',
mainConfigFile: "./app/main.js",
optimize: 'none',
name: 'main',
out: "./build/<%= pkg.name %>.js",
preserveLicenseComments: false,
paths: {
'domReady': 'empty:',
'angular': 'empty:',
"uiRouter": 'empty:',
"ui-grid": 'empty:',
"ng-dialog": 'empty:',
"jquery": 'empty:',
"ui-bootstrap": 'empty:',
"d3js": 'empty:',
"nvd3": 'empty:',
'angular-nvd3': 'empty:',
'angucomplete-alt': 'empty:',
'spin': 'empty:',
'angular-spinner': 'empty:',
'moment': 'empty:',
'angular-moment': 'empty:',
'angular-sanitize': 'empty:',
'ng-csv': 'empty:',
'ng-cookies': 'empty:'
}
}
}
}
在 routes.js 我有
define(['app'], function(app) {
'use strict';
return app.config(function($stateProvider) {
var routes = [
{
state: 'home',
url: '/home',
templateUrl: 'app/home/partials/home.html',
controller:'homeController'
}
];
$stateProvider.state(route.state,
{
url: route.url,
// templateUrl: route.templateUrl,
templateProvider: function($templateCache) {
return $templateCache.get(route.templateUrl);
},
controller:route.controller,
params:route.params
}
);
grunt-contrib-requirejs 在 build/main.js 文件末尾注入的引导代码。
require(['angular', 'app'], function(angular, app) { app.run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('home/partials/home.html',
"<div class=\"jumbotron text-center\">\r" +
"\n" +
"\t<p>{{message}}</p>\r" +
"\n" +
"</div>"
);
);
}]); });
现在的问题是,main.js 在底部附加了引导代码。它将模板放入 $templateCache。但是当应用程序加载时,它首先运行配置代码,然后调用 app.run()。这是显而易见的。因此,$templateCache.get() 在 routes.js 中获得了未定义的值。
我该如何解决这个问题?