Page 387 - AngularJS权威教程
P. 387
26.6 使用 Yeoman 构建 367
Grunt让这一过程很变得容易:可以简单的注册一个新任务来运行多个Grunt任务。在这种情 19
况下,你可以简单地将build和run命令包装到一个优先调用build的新任务中:
// 这里是上面的任务配置 20
}
});
// ...
grunt.registerTask('devemulate', [ 21
'build',
'shell:build'
]); 22
grunt.registerTask('devrun', [
'build', 23
'shell:run'
]);
grunt.registerTask('server',function(target){ 24
// ...
这段代码让我们可以使用devemulate命令:这样就可以在模拟器环境或者设备中运行我们 25
的应用。
$ grunt devemulate
26
注意,如果这个命令没有按照预期工作,通常可以使用grunt的--verbose标记
揭示问题所在,比如缺少依赖。 27
此外还可以使用devrun任务在一个已经设置接受正在开发的应用程序的移动设备中运行这
个应用程序: 28
$ grunt devrun
29
26.6.4 处理引导程序
30
最后,Cordova平台使用触发在DOM上的deviceready事件来表明设备已经准备就绪了。但
是在Cordova应用已经准备好和Angular应用启动之前,两者之间又陷入了一个时机问题。可以通
31
过创建一个捕获deviceready事件的服务,然后将它转变为一个在外部可用的变量来避开这个问
题。这个服务非常简单:
32
angular.module('gapappApp.services')
.factory('Cordova', function($q) {
var d = $q.defer(); 33
if(window.navigator) {
d.resolve(window.navigator);
} else {
document 34
.addEventListener('deviceready', function(evt) {
d.resolve(navigtor);
}); 35
}
return {
navigator: function() {
return d.promise; 36