0%

Angular2 Material Design开发环境搭建

Angular2和Angular1有什么区别?就是Java和Javascript,雷锋和雷锋塔的区别。刚会用Angular1做些小项目,发现Angular2来了,据说性能上提升还是蛮多,所以还是从0开始吧。Angular2虽然还是支持用es5代码开发,但连官方教程都已经用TypeScript,对于之前没有接触过的人来说,学习还是有些成本的。 作为一个新手,搭建环境还是折腾了很久,所以记录下来方便其他新手。

流程:

  1. 使用angular-cli创建项目
  2. 集成Angular Material

angular-cli和Angular Material目前都还在beta阶段,毕竟Angular2正式发布也没有很久,用于生产请自己斟酌。

创建Angular2项目

  1. 安装angular-cli

    npm install -g angular-cli
    
  2. 在适当的位置创建项目

    ng new angular2Demo
    cd angular2Demo
    ng serve
    

创建过程会自动使用npm下载依赖,ng serve即启动内置的服务器,默认端口4200。使用浏览器打开 http://localhost:4200,可以看到项目已经启起来了。 此时打开chrome的network,可以发现有个vendor.bundle.js特别大,有2M多,图上4M多是因为我已经加了Material库。这是webpack把所有依赖的库都打包在一起了,而且没有任何压缩。 image 显然这么大的文件放到生产环境中是不合适的。这是因为默认情况下,启动的是开发模式。 生成生产环境代码:

ng build --prod --env=prod

执行后,会在项目根目录下生成dist目录,所有优化后的代码 以生产模式启动服务器

ng serve --prod

再看network,发现所有资源自动打上了版本号vendor.xxx.bundle.js也被压到了200多k。

集成Material

  1. 安装

Material是以组件的形式开发的,所以安装也使用npm

npm install --save @angular/material

2.修改app.module.ts 打开src/app/app.module.ts,引入material模块

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';

import { AppComponent } from './app.component';
import { MaterialModule } from '@angular/material';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    MaterialModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
  1. 引入css样式

在src目录下新建material-design.scss:

@import '~@angular/material/core/theming/all-theme';

// NOTE: Theming is currently experimental and not yet publically released!
@include md-core();
$primary: md-palette($md-deep-purple);
$accent:  md-palette($md-amber, A200, A100, A400);
$theme: md-light-theme($primary, $accent);
@include angular-material-theme($theme);
.m2app-dark {
  $dark-primary: md-palette($md-pink, 700, 500, 900);
  $dark-accent:  md-palette($md-blue-grey, A200, A100, A400);
  $dark-warn:    md-palette($md-deep-orange);
  $dark-theme: md-dark-theme($dark-primary, $dark-accent, $dark-warn);
  @include angular-material-theme($dark-theme);
}

打开根目录下的angular-cli.json,styles配置增加刚刚的文件

"apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico"
      ],
      "index": "index.html",
      "main": "main.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.json",
      "prefix": "app",
      "mobile": false,
      "styles": [
        "styles.css",
        "material-design.scss"
      ],
      "scripts": [],
      "environments": {
        "source": "environments/environment.ts",
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  1. 配置MaterialDesign字体

index.html增加:

    <link href="//fonts.lug.ustc.edu.cn/icon?family=Material+Icons" rel="stylesheet">

使用了中科大的google font镜像

  1. 如果需要用到md-slider(可拖动的进度条)和md-slide-toggle(带滑动动画的开关),还需要安装HammerJS,否则到此环境搭建已完成。

    npm install hammerjs  --save 
    npm install @types/hammerjs --save-dev
    

修改src/app/app,module.ts,引入hammerjs

import 'hammerjs';

修改src/tsconfig.json,配置types增加hammerjs

{
  "compilerOptions": {
    "baseUrl": "",
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": ["es6", "dom"],
    "mapRoot": "./",
    "module": "es6",
    "moduleResolution": "node",
    "outDir": "../dist/out-tsc",
    "sourceMap": true,
    "target": "es5",
    "typeRoots": [
      "../node_modules/@types"
    ],
    "types": [
      "hammerjs"
    ]
  }
}

所有配置到此结束,我们写一段简单的代码测试一下。 编辑src/app/app.component.html:

<md-progress-spinner mode="indeterminate" ></md-progress-spinner>

启动服务器,如果所有配置没有错,页面上应该显示旋转的进度圈。