用Grunt搭建一个简易服务器,使用bower引入Angular UI Router,然后确认其运行正常

这是关于http://qiita.com/mude/items/9126a49b4c55ab322a25的延续。

在AngularJS的开发中,常常会使用Angular UI Router来引入。此外,为了运行,我们还决定搭建一个简易服务器。

准备简易服务器

安装一个用于建立简易服务器的插件。

为了使用Node.js的HTTP服务器connect模块,需要安装grunt-contrib-connect模块。

有关grunt-contrib-connect,http://qiita.com/ginpei/items/6a3f870da2a9ec043627提供了详细的信息。

顺便提一句,上次我没有创建 package.json,这次就趁机创建一下。在开发目录中执行以下命令。

npm init

只需按下几次回车键,问题将保持默认状态,然后会生成一个package.json文件。

接下来,安装grunt-contrib-connect插件。

npm install grunt-contrib-connect --save-dev

为了使用这个插件,我们需要定义一个Grunt任务。

定义grunt任务。

使用grunt-contrib-connect来定义用于启动服务器的Grunt任务。

首先,安装grunt-cli以确保能够执行Grunt任务。我认为进行全局安装是可行的。

npm install grunt-cli -g

在编辑器中,将下面的描述内容保存为名为Gruntfile.js的文件到开发目录中。

'use strict';

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    connect: {
      hoge:{
        options: {
          base:'public',
          keepalive: true,
          port: 8080
        }
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-connect');
}

参考になるGruntfile.jsの書き方は、http://js.studio-kingdom.com/grunt/doc/sample_gruntfileです。

在开发目录中执行”grunt connect”命令,根据”hoge”的设置启动connect模块。网站名称可以任意指定。

执行的时候就是这种感觉。

$ grunt connect
Running "connect:hoge" (connect) task
Waiting forever...
Started connect web server on http://localhost:8080

当在浏览器中访问 localhost:8080 时,应该会显示位于开发目录下的public文件夹内的index.html。通过这种方式,可以确认服务器正在运行。

获得UI Router

关于UI Router的详细信息,请参考以下链接:
http://qiita.com/sashimizakana/items/0b03131103a5cd01bfb

上次介绍了bower的使用,但是使用bower也能轻松安装UI Router。

bower install angular-ui-router --save

尝试使用UI Router

首先,在开发目录下创建一个名为views的文件夹,并创建home.html和sub.html两个文件。文件内容可以随意编写。

同样地,我们在开发目录中创建一个名为app.js的文件。其中内容如下所示。如果使用UI路由器,我认为这是一个传统的模块定义方式。

'use strict';

var myApp = angular.module('MyApp',['ngMaterial','ui.router']);

myApp.config(['$stateProvider','$urlRouterProvider',function($stateProvider, $urlRouterProvider){
  $urlRouterProvider.otherwise('/');

  $stateProvider.state('home',{
    url:'/',
    views:{
      panel:{
        templateUrl:'./views/home.html'
      }
    }
  }).state('sub',{
    url:'/sub',
    views:{
      panel:{
        templateUrl:'./views/sub.html'
      }
    }
  });
}]);

index.html的呈现大概是这样的。

<html lang="en" ng-app="MyApp">
  <head>
    <link rel="stylesheet" href="./components/angular-material/angular-material.min.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=RobotoDraft:300,400,500,700,400italic">
    <link rel="stylesheet" href="./hello.css">
    <meta name="viewport" content="initial-scale=1" />
  </head>
  <body>
    <h1>Hello</h1>
    <div ui-view="panel"></div>

    <!-- Angular Material Dependencies -->
    <script src="./components/angular/angular.min.js"></script>
    <script src="./components/angular-animate/angular-animate.min.js"></script>
    <script src="./components/angular-aria/angular-aria.min.js"></script>
    <script src="./components/angular-ui-router/release/angular-ui-router.min.js"></script>
    <script src="./components/angular-material/angular-material.min.js"></script>
    <script src="./app.js"></script>
  </body>
</html>

由于之前有处理过Angular Material,所以相关的JavaScript文件加载部分仍然存在,但现在不需要太在意。另外,我将模块名设为MyApp,因此ng-app的属性值也改为MyApp。由于不使用body的ng-controller属性,我将其删除。

当在浏览器中访问localhost:8080时,会被重定向到localhost:8080/#/,浏览器上会显示在home.html中编写的内容,在”Hello”这个字下方显示。另外,当访问localhost:8080/#/sub时,浏览器上会显示在sub.html中编写的内容,在”Hello”这个字下方显示。

看起来 UI Router 在运行中。

总结

如果使用bower,可以安装Angular的一个模块叫做Angular UI Router。

追加(修正的地方)

    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic">
广告
将在 10 秒后关闭
bannerAds