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
   382   383   384   385   386   387   388   389   390   391   392