import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MdSidenavModule, MdToolbarModule, MdIconModule, MdButtonModule, MdIconRegistry, MdCardModule, MdInputModule, MdListModule } from '@angular/material'; import { HttpModule } from '@angular/http'; @NgModule({ imports: [ CommonModule, HttpModule, MdSidenavModule, MdToolbarModule, MdIconModule, MdButtonModule, MdCardModule, MdInputModule, MdListModule ], declarations: [], exports: [ CommonModule, MdSidenavModule, MdToolbarModule, MdIconModule, MdButtonModule, HttpModule, MdCardModule, MdInputModule, MdListModule ] }) export class SharedModule { }
技巧01:MdListModule提供了兩個列表組件 -> md-list 和 md-nav-list,它們的用法差很少,只是前者沒有動畫效果,後者有動畫效果而已就(後者一般用於導航欄)css
<md-nav-list> <h3 md-subheader>客戶微服務</h3> <md-list-item>客戶管理</md-list-item> <h3 md-subheader>員工微服務</h3> <md-list-item>員工管理</md-list-item> </md-nav-list>
代碼解釋01:md-list-item裏面包含了一個div,這個div是一個橫向排列的flex容器html
代碼解釋02:md-subheader 命令只是將相應元素做爲一個段落分割而已node
<md-nav-list> <h3 md-subheader>客戶微服務</h3> <md-list-item> <!-- <md-icon md-list-icon svgIcon="day"></md-icon> --> <span md-line>客戶管理</span> <span md-line md-subheader>客戶基本信息管理</span> </md-list-item> <h3 md-subheader>員工微服務</h3> <md-list-item>員工管理</md-list-item> </md-nav-list>
代碼解釋01:md-list-item中的通常元素都會被當作是一個flex項目放到一個flex容器中chrome
代碼解釋02:md-line命令表示md-list-item中的內容會被多行顯示typescript
<md-nav-list> <h3 md-subheader>客戶微服務</h3> <md-list-item> <md-icon md-list-icon svgIcon="day"></md-icon> <span md-line>客戶管理</span> <span md-line md-subheader>客戶基本信息管理</span> </md-list-item> <h3 md-subheader>員工微服務</h3> <md-list-item>員工管理</md-list-item> </md-nav-list>
代碼解釋01:兩個標有md-line的元素會被當作一個flex項目,可是它們是分行顯示的;md-subheader命令只是將字體變小而已npm
代碼解釋02:md-icon組件會被當作是一個單獨的flex項目,md-list-icon命令的做用是讓圖標在felx容器的第一個位置進行顯示編程
技巧01:md-list-item中那個div是一個flex容器,它默認時橫向排列的、項目時居中排列;若是想要圖標在縱軸的對齊方式是頂端對齊就必須本身寫樣式來確保felx項目在縱軸方向頂端對齊app
md-icon { align-self: flex-start; }
技巧02:svg圖標的顯示請參見MdIconModule模塊相關知識點dom
技巧03:當靜態svg資源在不一樣文件夾時的重構技巧ide
import { DomSanitizer } from '@angular/platform-browser'; import { MdIconRegistry } from '@angular/material'; export const loadSvgResources = ( mdIconRegistry: MdIconRegistry, domSanitizer: DomSanitizer ) => { const imgDir = 'assets/img'; const sidebarDir = `${imgDir}/sidebar`; const dayDir = `${imgDir}/days`; mdIconRegistry.addSvgIcon('day', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/day.svg`)); mdIconRegistry.addSvgIcon('month', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/month.svg`)); mdIconRegistry.addSvgIcon('project', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/project.svg`)); mdIconRegistry.addSvgIcon('projects', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/projects.svg`)); mdIconRegistry.addSvgIcon('week', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/week.svg`)); mdIconRegistry.addSvgIcon('header', domSanitizer.bypassSecurityTrustResourceUrl('assets/svg/header.svg')); }
需求:根據當前日期顯示對應的日期圖標
import { DomSanitizer } from '@angular/platform-browser'; import { MdIconRegistry } from '@angular/material'; export const loadSvgResources = ( mdIconRegistry: MdIconRegistry, domSanitizer: DomSanitizer ) => { const imgDir = 'assets/img'; const sidebarDir = `${imgDir}/sidebar`; const dayDir = `${imgDir}/days`; mdIconRegistry.addSvgIcon('day', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/day.svg`)); mdIconRegistry.addSvgIcon('month', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/month.svg`)); mdIconRegistry.addSvgIcon('project', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/project.svg`)); mdIconRegistry.addSvgIcon('projects', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/projects.svg`)); mdIconRegistry.addSvgIcon('week', domSanitizer.bypassSecurityTrustResourceUrl(`${sidebarDir}/week.svg`)); const days = [ 1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30,31 ]; days.forEach( d => mdIconRegistry.addSvgIcon(`day${d}`, domSanitizer.bypassSecurityTrustResourceUrl(`${dayDir}/day${d}.svg`))); mdIconRegistry.addSvgIcon('header', domSanitizer.bypassSecurityTrustResourceUrl('assets/svg/header.svg')); }
cnpm install --save date-fns -> 運行環境用
cnpm install --save-dev @types/date-fns -> 開發環境用
{ "name": "material", "version": "0.0.0", "license": "MIT", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animation": "^4.0.0-beta.8", "@angular/animations": "^4.2.4", "@angular/common": "^4.2.4", "@angular/compiler": "^4.2.4", "@angular/core": "^4.2.4", "@angular/forms": "^4.2.4", "@angular/http": "^4.2.4", "@angular/material": "^2.0.0-beta.7", "@angular/platform-browser": "^4.2.4", "@angular/platform-browser-dynamic": "^4.2.4", "@angular/router": "^4.2.4", "core-js": "^2.4.1", "date-fns": "^1.29.0", "rxjs": "^5.4.2", "zone.js": "^0.8.14" }, "devDependencies": { "@angular/cli": "1.4.9", "@angular/compiler-cli": "^4.2.4", "@angular/language-service": "^4.2.4", "@types/date-fns": "^2.6.0", "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", "codelyzer": "~3.2.0", "jasmine-core": "~2.6.2", "jasmine-spec-reporter": "~4.1.0", "karma": "~1.7.0", "karma-chrome-launcher": "~2.1.1", "karma-cli": "~1.0.1", "karma-coverage-istanbul-reporter": "^1.2.1", "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.1.2", "ts-node": "~3.2.0", "tslint": "~5.7.0", "typescript": "~2.3.3" } }
import { Component, OnInit } from '@angular/core'; import { getDate } from 'date-fns'; @Component({ selector: 'app-sidenav', templateUrl: './sidenav.component.html', styleUrls: ['./sidenav.component.scss'] }) export class SidenavComponent implements OnInit { today = 'day'; constructor() { } ngOnInit() { this.today = `day${getDate(new Date())}`; // 獲取當前日期的日 } }
<md-nav-list dense> <h3 md-subheader>項目</h3> <md-list-item> <md-icon md-list-icon svgIcon="projects"></md-icon> <span md-line>項目首頁</span> <span md-line md-subheader>查看你的全部項目</span> </md-list-item> <h3 md-subheader>日曆</h3> <md-list-item> <md-icon md-list-icon svgIcon="project"></md-icon> <span md-line>日曆首頁</span> <span md-line md-subheader>根據日期查看</span> </md-list-item> <md-list-item> <md-icon md-list-icon svgIcon="month"></md-icon> <span md-line>月視圖</span> <span md-line md-subheader>按月查看</span> </md-list-item> <md-list-item> <md-icon md-list-icon svgIcon="week"></md-icon> <span md-line>周視圖</span> <span md-line md-subheader>按周查看</span> </md-list-item> <md-list-item> <md-icon md-list-icon [svgIcon]="day"></md-icon> <span md-line>日視圖</span> <span md-line md-subheader>按月查看</span> </md-list-item> </md-nav-list>
技巧01:實例化日期對象,從日期對象中獲取時間信息
MdButtonToggleModule中有兩個組件選擇器一個是md-button-toggle-group 一個是 md-button-toggle;其中md-button-toggle至關因而一個單選框,而md-button-toggle-group至關因而多個md-button-toggle組成的單選框組合,可是每次只能有一個md-button-toggle會被選中,md-button-toggle-group的值就是當前被選中的md-button-toggle的值
在共享模塊中導入MdButtonToggleModule
技巧01:還須要進行導出操做,由於其它模塊若是須要用到MdButtonToggleModule就只須要導入共享模塊就能夠啦
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MdToolbarModule, MdIconModule, MdButtonModule, MdCardModule, MdInputModule, MdListModule, MdSlideToggleModule, MdGridListModule, MdDialogModule, MdAutocompleteModule, MdMenuModule, MdCheckboxModule, MdTooltipModule, MdRadioModule, MdDatepickerModule, MdNativeDateModule, MdSelectModule, MdButtonToggleModule } from '@angular/material'; import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; import { DirectiveModule } from '../directive/directive.module'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ImageListSelectComponent } from './image-list-select/image-list-select.component'; @NgModule({ imports: [ CommonModule, FormsModule, ReactiveFormsModule, MdToolbarModule, MdIconModule, MdButtonModule, MdCardModule, MdInputModule, MdListModule, MdSlideToggleModule, MdGridListModule, MdDialogModule, MdAutocompleteModule, MdMenuModule, MdCheckboxModule, MdTooltipModule, MdRadioModule, MdDatepickerModule, MdNativeDateModule, MdSelectModule, DirectiveModule, MdButtonToggleModule ], declarations: [ConfirmDialogComponent, ImageListSelectComponent], entryComponents: [ ConfirmDialogComponent ], exports: [ CommonModule, FormsModule, ReactiveFormsModule, MdToolbarModule, MdIconModule, MdButtonModule, MdCardModule, MdInputModule, MdListModule, MdSlideToggleModule, MdGridListModule, MdDialogModule, MdAutocompleteModule, MdMenuModule, MdCheckboxModule, MdTooltipModule, MdRadioModule, MdDatepickerModule, MdNativeDateModule, MdSelectModule, DirectiveModule, ImageListSelectComponent, MdButtonToggleModule ] }) export class SharedModule { }
<div class="panel panel-primary"> <div class="panel-heading">button toggle的使用</div> <div class="panel-body"> <md-button-toggle-group #group="mdButtonToggleGroup"> <md-button-toggle value="fury">測試01</md-button-toggle> <md-button-toggle value="warrior">測試02</md-button-toggle> <md-button-toggle value="zeus">測試03</md-button-toggle> </md-button-toggle-group> <h4>選擇的數據爲:{{ group.value }}</h4> </div> <div class="panel-footer">2018-2-1 16:22:52</div> </div>