angular5+ 之如何用material的UI库组件构建你的web页面

开拓新专题,探索angular6, Rxjs6, material UI, Ionic, GraphQL,WebGL,PWA... 啥最新咱讲啥,紧跟时代的屁股。

material

angular material简介
安装 项目搭建 相关包import
components组件过一遍
实例GIF图展示
为CDK做下期分解铺垫

本以为Ionic可以走遍天下,果然too young too naive
木事木事。不都是UI库嘛,撸起袖子npm 走起来,转战web端UI库,不信干不过,
node的2.0版本 deno都出来了,谁都别拉我,我还能继续学,谁拉我跟谁急

人家deno作者辣么谦虚:deno取自Design mistakes node

我。。。大神果然是用来膜拜的,恩...


学不动系列

我某某同事随口那么一提:还是ant-design 好用
我.... (的内心:这又是啥???)

ant-design, 移动端设计规范,主要作为产品、设计师、工程师学习产品交互设计的一种工具,用起来和前端的UI框架库类似

OK,改天有空再扯远点,毕竟今天的主题是material

angular material官网


  • 注意:谷歌Material Design在如今的前端页面设计中非常流行。Material Design的设计风格向我们展示了一个简单而有内涵的现代UI设计方案。该框架有很多优秀的子框架:Materialize, Angular Material,Material UI,MUI CSS框架,Polymer,其中angular material才是我们今天要讲的主题

步骤:

  • 1.前期准备:npm, angular cli脚手架,
    1. 自建新项目:
ng new my-app //angular项目名字
ng g c test  //组件名test
    1. 安装angular material 和angular cdk
//npm 方法
npm install --save @angular/material @angular/cdk
//或者 yarn方法
yarn add @angular/material @angular/cdk
//或者使用snapshot中build,但是不建议,目前还不稳定,担心在解压阶段会时不时的崩溃一下下

//npm
npm install --save angular/material2-builds angular/cdk-builds
//yarn
yarn add angular/material2-builds angular/cdk-builds
    1. 常用项 animations(非必备)
//npm
npm install --save @angular/animations
//yarn
yarn add @angular/animations

//在你想用的组件里再import进去,我这里展示在app根组件里
//app.module.ts:
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

@NgModule({
  ...
  imports: [BrowserAnimationsModule],
  ...
})
export class AppModule { }
  • 5.引入组件模块
    * 为了后续支持使用NgModule
//随你的需求在需要的地方引入,这里在根组件app里
//app.module.ts:
import {MatButtonModule, MatCheckboxModule} from '@angular/material';

@NgModule({
  ...
  imports: [MatButtonModule, MatCheckboxModule],
exports: [MatButtonModule, MatCheckboxModule], 
//如果只想这一个组件自己单独用,就不用添加这export,如果还想给自己的子组件(eg:test),就要export出去
  ...
})
export class AppModule { }
//根目录里的styles.css
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
// 或者直接<link>标签到index.html里
<link href="node_modules/@angular/material/prebuilt-themes/indigo-pink.css" rel="stylesheet">
    1. 手势支持

      有的标签(eg:mat-slide-toggle, mat-slider, mattooltip 等)需要hammerJS来支持,为了获取这些组件的所有特性,通过npm,CDN来引入到项目中

//npm
npm install --save hammerjs
//yarn
yarn add hammerjs

上面下载好后,在你的入口文件中引入(eg:main.ts)

import 'hammerjs';
    1. (可选)添加material 的icon
      如果你想要你的mat-icon标签获取到官方的Material Design Icons,在index.html文件中加入下面的link
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

OK,至此为止,该引入的都已经引入好了,现在我们简单讲一下material的组件components

一共分为六大类

Components 组件
Form Controls 表单控件
Navigation 导航
Layout 布局
Buttons & Indicators 按钮 & 指示器
Popups & Moduals 弹框 & 提示框
Data table 数据表格

我们来点实际的,挑几个胸大屁股翘得漂亮GIF动态components组件show一下,啧啧,爽哉

一、Form Controls | 表单控件

  • 自带模糊查询功能的输入框


    自带模糊查询功能的输入框
  • 完胜各种日期插件,曾经的什么laydate,Wdatepicker日期控件,一去不复返咯
  • 年月日,/-连接格式随意切换,中英日法德语言开心就好,想大就大....你想要的日期方式,我这里都有~~~
你想要的日期方式我都有
大大大,老花眼也不怕
<mat-form-field class="example-full-width">
  <input matInput [matDatepicker]="picker" placeholder="Choose a date">
  <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
  <mat-datepicker touchUi="true" #picker></mat-datepicker>
</mat-form-field>
花样百变的grid栅格系统,听话,咱不学bootstrap
//html文件
<mat-grid-list cols="4" rowHeight="100px">
  <mat-grid-tile
      *ngFor="let tile of tiles"
      [colspan]="tile.cols"
      [rowspan]="tile.rows"
      [style.background]="tile.color">
    {{tile.text}}
  </mat-grid-tile>
</mat-grid-list>

//GridListDynamicExample组件ts文件
export class GridListDynamicExample { 
  tiles = [
    {text: 'One', cols: 3, rows: 1, color: 'lightblue'},
    {text: 'Two', cols: 1, rows: 2, color: 'lightgreen'},
    {text: 'Three', cols: 1, rows: 1, color: 'lightpink'},
    {text: 'Four', cols: 2, rows: 1, color: '#DDBDF1'},
  ];
}
  • 自带动画特效的tab栏切换
    * 就喜欢你看不惯我天生丽质又干不掉我的样子


    天生自带animations
tab切换
  //哼,人家material的tag标签自带这些特征,
<mat-tab-group>
  <mat-tab label="Tab 1">Content 1</mat-tab>
  <mat-tab label="Tab 2">Content 2</mat-tab>
</mat-tab-group>
  • stepper分布器


    垂直版,跟我一步步填写注册信息吧
  • 风琴式的展开折叠框


    手风琴啊手风琴
  • 令人抓狂的loading加载圈圈


    转啊转
//相信我,就这一个标签搞定
<mat-spinner></mat-spinner>
  • 或者是直线型的进度条,莫名的快感,比圈圈舒服多了


    进度条
  • 字体图标
    说到字体图标,就来劲,SVG啊!大爱,矢量图,代码操作,简单易懂,再加上anime.js,两行搞定

这个我要单独拎出来一篇文章讲一讲!,先放官方链接 MATERIAL DESIGN Icons

icon fonts后面还有好多,暂不展示了,等着我放大招
  • 简约版的对话框
    同事用的时候遇到了点小问题,说这个dialog弹出的时候页面会有向上的位移,emmm,明儿好好研究一下下~~~


    分分钟animation的赶脚
  • 经典款hover悬空出现提示文本
    想当初暂用jquery的时候,还要用什么hover,toggle,trigger....各种点击事件,现在好咯分分钟都是设计感。


    彻底臣服拜倒在angular material裙下
<mat-form-field class="example-user-input">
  <mat-select placeholder="Tooltip position" [formControl]="position">
    <mat-option *ngFor="let positionOption of positionOptions" [value]="positionOption">
      {{ positionOption }}
    </mat-option>
  </mat-select>
</mat-form-field>

<button mat-raised-button
        matTooltip="Info about the action"
        [matTooltipPosition]="position.value"
        aria-label="Button that displays a tooltip in various positions">
  Action
</button>

该子组件TooltipPositionExample 的ts文件

export class TooltipPositionExample { 
  positionOptions: TooltipPosition[] = ['after', 'before', 'above', 'below', 'left', 'right'];
  position = new FormControl(this.positionOptions[0]);
}
摊手状
  • 完美主义者的分页
    以前用PHP结合bootstrap到腾出一个一次显示7个数据的分页功能就激动得3天睡不着觉,,,,(傻缺,啊呸、单纯的时光们吖)


    下一页下一页
//就这么点代码就实现了分页,别拦我,我要去撞墙了
<mat-paginator [length]="100"
              [pageSize]="10"
              [pageSizeOptions]="[5, 10, 25, 100]">
</mat-paginator>
  • 动态的表格排序


    升序or降序,这是一个问题
<table matSort (matSortChange)="sortData($event)">
  <tr>
    <th mat-sort-header="name">Dessert (100g)</th>
    <th mat-sort-header="calories">Calories</th>
    <th mat-sort-header="fat">Fat (g)</th>
    <th mat-sort-header="carbs">Carbs (g)</th>
    <th mat-sort-header="protein">Protein (g)</th>
  </tr>

  <tr *ngFor="let dessert of sortedData">
    <td>{{dessert.name}}</td>
    <td>{{dessert.calories}}</td>
    <td>{{dessert.fat}}</td>
    <td>{{dessert.carbs}}</td>
    <td>{{dessert.protein}}</td>
  </tr>
</table>

大总结

  • 相信官方文档的力量,最科学,最快的'捷径'
  • 框架都是在不断更新的,以不变应万变,才不会出现‘学不动’ 的状态
  • 再好的组件也是基于咱们JavaScript基础语法,基础扎实,才能走得远
  • 至于angular material 的CDK,后续研究更新中,嘤嘤嘤。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343