前提准备:

  构建好一个Angular2应用

  熟悉CSS的flex布局风格

1 利用flex进行布局

  1.1 创建三个组件

    app-header  app-main  app-footer

  1.2 在主组件中编写大体结构代码

<div class="site">
<header>
<app-header></app-header> <!-- 页眉组件 -->
</header>
<main>
<app-main></app-main> <!-- 内容组件 -->
</main>
<footer>
<app-footer></app-footer> <!-- 页脚组件 -->
</footer>
</div>

  1.3 在全局样式中编写代码实现flex风格布局

/* You can add global styles to this file, and also import other style files */

@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; // 导入material的内建主体

html, body, app-root, md-sidenav-container, .site {
width: 100%;
height: 100%;
margin: 0;
} .site {
display: flex;
flex-direction: column;
} header {
background-color: skyblue; } main {
background-color: grey;
flex: 1;
} footer {
background-color: skyblue;
}

  1.3 布局效果如下

    

2 利用MdSidenavModule快速构建侧边栏

  2.1 下载相关的依赖包

    cnpm i --save @angular/material@2.0.0-beta.7

    技巧01:使用 materil 时需要将material的主题引入到全局样式中,引入全局样式有两种方式

      方式一:在 styles.scss 中通过 @import 引入,例如     

@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';

      方式二:在 .angular-cli.json 文件中为styles添加元素

        参考博文:点击前往

  2.2 在主模块中引入MdSidenavModule模块

    import { MdSidenavModule } from '@angular/material';

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core'; import { MdSidenavModule } from '@angular/material'; import { AppComponent } from './app.component';
import { TestComponent } from './test/test.component';
import { HeaderComponent } from './frame/header/header.component';
import { MainComponent } from './frame/main/main.component';
import { FooterComponent } from './frame/footer/footer.component';
import { SidebarComponent } from './frame/sidebar/sidebar.component'; @NgModule({
declarations: [
AppComponent,
TestComponent,
HeaderComponent,
MainComponent,
FooterComponent,
SidebarComponent
],
imports: [
BrowserModule,
MdSidenavModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

主模块

  2.3 在主组件中利用MdSidenavModule提供的组件进行侧边栏的构建 

<md-sidenav-container>
<md-sidenav #sidenav>
<app-sidebar></app-sidebar>
</md-sidenav> <div class="site">
<header>
<app-header></app-header>
</header>
<main>
<button (click)="sidenav.open()">点击划出</button>
<app-main></app-main>
</main>
<footer>
<app-footer></app-footer>
</footer>
</div>
</md-sidenav-container>

  2.4 具体效果如下

    

    点击按钮后划出侧边栏的效果如下:

    

4 md-sidenav组件属性详解

  4.1 mode属性:设置侧边栏弹出的效果

    over -> 覆盖(默认)

    side -> 推挤

    push -> 覆盖 + 推挤

  

  效果如下:

  

  4.2 align属性:设置侧边栏的位置

    start -> 左边(默认)

    end -> 右边

    

    效果如下:

    

  4.3 注意:material最多只支持两个侧边栏

<md-sidenav-container>
<md-sidenav #sidenav1 mode=push align=start> <!-- 左边的侧边栏 -->
<app-sidebar></app-sidebar>
</md-sidenav>
<md-sidenav #sidenav2 mode=push align=end> <!-- 右边的侧边栏 -->
<app-sidebar></app-sidebar>
</md-sidenav>
<div class="site">
<header>
<app-header></app-header> <!-- 页眉组件 -->
</header>
<main>
<button (click)=sidenav1.open()>点击划出左侧边栏</button>
<button (click)=sidenav2.open()>点击划出右侧边栏</button>
<app-main></app-main> <!-- 内容组件 -->
</main>
<footer>
<app-footer></app-footer> <!-- 页脚组件 -->
</footer>
</div>
</md-sidenav-container>

  4.4 相关方法

    open -> 打开侧边栏

    toggle -> 打开、关闭

<md-sidenav-container>
<md-sidenav #sidenav1 mode=side align=start> <!-- 左边的侧边栏 -->
<app-sidebar></app-sidebar>
</md-sidenav>
<md-sidenav #sidenav2 mode=side align=end> <!-- 右边的侧边栏 -->
<app-sidebar></app-sidebar>
</md-sidenav>
<div class="site">
<header>
<app-header></app-header> <!-- 页眉组件 -->
</header>
<main>
<button (click)=sidenav1.toggle()>toggle划出关闭左侧边栏</button>
<button (click)=sidenav2.open()>open划出右侧边栏</button>
<app-main></app-main> <!-- 内容组件 -->
</main>
<footer>
<app-footer></app-footer> <!-- 页脚组件 -->
</footer>
</div>
</md-sidenav-container>

5 利用MdToolbarModule对页眉和页脚进行重构

  5.1 清除主组件中对页眉和页脚的样式

    

/* You can add global styles to this file, and also import other style files */

@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; // 导入material的内建主体

html, body, app-root, md-sidenav-container, .site {
width: 100%;
height: 100%;
margin: 0;
} .site {
display: flex;
flex-direction: column;
} header {
// background-color: skyblue; } main {
background-color: grey;
flex: 1;
} footer {
// background-color: skyblue;
} .fill-remaining-space { // flex项目自动填充多余空间
flex: 1 1 auto;
}

  5.2 在需要用到的模块中导入MdToolbarModule模块

    

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core'; import { MdSidenavModule, MdToolbarModule } from '@angular/material'; import { AppComponent } from './app.component';
import { TestComponent } from './test/test.component';
import { HeaderComponent } from './frame/header/header.component';
import { MainComponent } from './frame/main/main.component';
import { FooterComponent } from './frame/footer/footer.component';
import { SidebarComponent } from './frame/sidebar/sidebar.component'; @NgModule({
declarations: [
AppComponent,
TestComponent,
HeaderComponent,
MainComponent,
FooterComponent,
SidebarComponent
],
imports: [
BrowserModule,
MdSidenavModule,
MdToolbarModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

  5.3 利用md-toolbar组件重构页眉和页脚组件中的内容

    md-toolbar组件是一个flex容器,可以直接使用flex容器相关的属性

    技巧01:md-toolbar会自动在其内部添加一个div元素,这个div元素才是一个flex容器,从源码中可以看出

      

    md-toolbar的color属性:设置白md-toolbar的颜色

      primary -> 主色

      accent -> 副色

      warn -> 警告色

      技巧:主色和副色是在主题中设置的

      material主题色显示:点击前往

<md-toolbar color=primary>
<button (click)="openSidebar()">菜单</button>
&nbsp;
<span>企业协作平台</span>
</md-toolbar>

重构页眉组件

<md-toolbar color=primary>
<span class="fill-remaining-space"></span>
<span>&copy; 庠序科技</span>
<span class="fill-remaining-space"></span>
</md-toolbar>

重构页脚组件

  效果图如下:

    

  5.4 代码解释01

<md-toolbar color=primary>
<span class="fill-remaining-space"></span>
<span>&copy; 庠序科技</span>
<span class="fill-remaining-space"></span>
</md-toolbar>

  md-toolbar中的三个span元素都是flex项目,其中第一个和第三个span元素由于使用了fill-remaining-space类,所以他们两个元素会将剩余的空间进行平均分配

  fill-remaining-space对应的代码如下:    

.fill-remaining-space { // flex项目自动填充多余空间
flex: 1 1 auto;
}

  flex布局相关:点击前往

  flex布局实战:点击前往

  5.5 代码解释02

<md-toolbar color=primary>
<span class="fill-remaining-space"></span>
<span>&copy; 庠序科技</span>
<span class="fill-remaining-space"></span>
<md-toolbar-row>
<span class="fill-remaining-space"></span>
<span>重庆市沙坪坝区三峡广场</span>
<span class="fill-remaining-space"></span>
</md-toolbar-row>
</md-toolbar>

  md-toolbar可以支持多行,其中每个md-toolbar-row就是单独的一行,而且md-toolbar-row也是一个flex容器用法和md-toolbar相同

  具体效果如下:

    

  5.6 应用代码完善

    5.6.1 为页眉组件添加方法使得在点击按钮时会触发相应的处理逻辑

      

import { Component, OnInit, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements OnInit {
@Output()
toggle = new EventEmitter<void>(); constructor() { } ngOnInit() {
} openSidebar() {
this.toggle.emit();
} }

    5.6.2 在使用页眉组件的父组件中编写应用页眉组件

      

<md-sidenav-container>
<md-sidenav #sidenav1 mode=side align=start> <!-- 左边的侧边栏 -->
<app-sidebar></app-sidebar>
</md-sidenav>
<md-sidenav #sidenav2 mode=push align=end> <!-- 右边的侧边栏 -->
<app-sidebar></app-sidebar>
</md-sidenav>
<div class="site">
<header>
<app-header (toggle)="sidenav1.toggle()"></app-header> <!-- 页眉组件 -->
</header>
<main>
<!-- <button (click)=sidenav1.toggle()>toggle划出关闭左侧边栏</button> -->
<button (click)=sidenav2.open()>open划出右侧边栏</button>
<app-main></app-main> <!-- 内容组件 -->
</main>
<footer>
<app-footer></app-footer> <!-- 页脚组件 -->
</footer>
</div>
</md-sidenav-container>

    效果如下:

      

Material使用01 侧边栏MdSidenavModule、工具栏MdTollbarModule的更多相关文章

  1. 将项目添加到Finder侧边栏和工具栏

    转: http://www.cnblogs.com/wormday/archive/2011/05/08/2039468.html 1.在侧边栏和工具栏右键,有相应的设置选项 2.可以将项目拖到侧边栏 ...

  2. Material使用03 MdCardModule模块、MdInputModule模块

    需求:先需要增加一个登录模块 1 创建登录模块 ng g m testLogin 1.1 将共享模块导入到登录模块中 import { NgModule } from '@angular/core'; ...

  3. 20201203-6 设置excel样式【】

    1-1 1 import os 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alig ...

  4. 2015最流行的Android组件、工具、框架大全

    Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...

  5. 教你如何---构建良好的windows程序(初学者必看)

    一使用菜单栏和工具栏 1.菜单栏和工具栏有什么作用和优点: 通过菜单栏把应用程序的功能进行分组,能够方便用户查找和使用,下图所示的菜单栏包含的每一项都是顶层菜单项,顶层菜单项下的选项称为”子菜单”或” ...

  6. 2015年十大热门Android开源新项目

    2015年十大热门Android开源新项目 2015 即将结束,又到了大家喜闻乐见的年终盘点时刻啦,今天给大家盘点一下 2015 年 Android 开发领域新出现的 10 大热门开源项目.数据来自于 ...

  7. Niagara workbench 介绍文档---翻译

    一. 发现在建立station的时候存在一些问题,所以对技术文档部分做一个详细的了解,在这之前对出现的问题总结一下 1.  在 Windows操作系统中Application Direction中可以 ...

  8. 【小超_Android】2015最流行的android组件、工具、框架大全(兴许)

    2015.07.07 FlyRefresh 创意Replace的Android实现,非常cool. fab-toolbar Material Design风格的FAB工具栏效果 MaterialVie ...

  9. idea下maven项目增加依赖项目里面没有添加相关依赖jar

    困扰了一晚上的问题,一般在pom.xml中增加了相关依赖,idea会自动将依赖的Jar包增加到maven项目中,但是在pom.xml中增加了依赖,项目中并没有 偶然打开idea的侧边栏maven工具栏 ...

随机推荐

  1. 爆炸快求1~n有多少素数

    这个求一千亿以内的素数大约用6780ms #include <stdio.h> #include <iostream> #include <string.h> #i ...

  2. Python_Python遍历列表的四种方法

    方式一: app_list = [1234, 5677, 8899] <!-- lang: python --> for app_id in app_list: <!-- lang: ...

  3. ⑿bootstrap组件 缩略图 警告框 进度条 基础案例

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  4. javaScript函数提升及作用域

    代码片段: var a = 1; function foo() { console.log(a); //输出为undefined if (!a) { var a = 2; } alert(a); }; ...

  5. update and的坑

    开发那边抛出个有意思的问题,下面的现象如何解释呢? mysql> select * from A; +------+------+ | t1 | t2 | +------+------+ | 1 ...

  6. C# 跨平台的支付类库ICanPay

    随着微软的开源,越来越多的项目支持跨平台,但是各种支付平台提供的类库,又老又不支持跨平台,吐槽下,尤其是微信,还有好多坑,于是ICanPay诞生了,今天就来讲ICanPay是什么,怎么使用? ICan ...

  7. Next week plan

    1.get a job 2.write a high performance chatroom with encryption.  Use scala. Next Week turn to Rust

  8. [最短路]P1462 通往奥格瑞玛的道路

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  9. 前端学习记录之Javascript-DOM

    简介 为了快捷方便,在工作和项目中,一直都是使用的框架,比如jqeruy,vuejs,react等.然后在长时间使用框架后,往往有一个后遗症,就是对于原生的Javascript基本上已经不知道怎么写了 ...

  10. 部分小程序无法获取UnionId原因

    问题背景 通过观察数据,发现有一部分用户是无法获取到UnionId的 也就是接口返回的参数中不包含UnionId参数 看了微信文档的解释,只要小程序在开放平台绑定,就一定会分配UnionId 网上也有 ...