Material使用02 图标MdIconModule、矢量图作为图标使用及改进

1 MdIconModule模块的使用

  1.1 在需要用到的模块中引入Material图标模块

    

import { BrowserModule } from ‘@angular/platform-browser‘;
import { NgModule } from ‘@angular/core‘;

import  { MdSidenavModule, MdToolbarModule, MdIconModule, MdButtonModule } 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,
    MdIconModule,
    MdButtonModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

  1.2 利用md-icon组件来实现图标显示

    <md-icon>图标名字</md-icon>

      技巧01:这里的图标名字不是自定义的,而实根据material官网的规则来定的

      技巧02:material官方提供的图标 -> 点击前往

      代码解释:只要图标名字是合法的,那么md-icon组件就会显示出图标名字对应的图标来

    <md-icon>alarm</md-icon>
    <md-icon>android</md-icon>
    <md-icon>fingerprint</md-icon>

    

  1.3 代码完善

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

  代码解释:由于md-icon组件是在button元素内的,所以如果不对button元素进行重构就会是如下的显示效果

    

  通过MdButtonModule模块将一般的button元素变成icon型的button元素:在需要用的模块导入MdButtonModule模块,在需要进行改造的button元素上添加

md-icon-button,完成这两步后的显示效果如下:

    

2 如何将矢量图作为图标进行显示

  2.1 矢量图:点击前往

  2.2 阿里巴巴矢量图库:点击前往

  2.3 从阿里巴巴的矢量图库汇总下载一张svg矢量图

  2.4 将下载好的svg矢量图复制到angular2项目中的assets文件夹中

  2.5 在需要用矢量图作为图标的组件中引入两个模块

import { MdIconRegistry } from ‘@angular/material‘;
import { DomSanitizer } from ‘@angular/platform-browser‘; 

  2.6 在需要用矢量图作为图标的组件的构造函数中依赖注入引入的两个模块并做相应的初始化

  constructor(
    mdIconRegistry: MdIconRegistry, domSanitizer: DomSanitizer
  ) {
    mdIconRegistry.addSvgIcon(‘glasses‘, domSanitizer.bypassSecurityTrustResourceUrl(‘assets/svg/glasses.svg‘));
  }

  代码解释:mdIconRegistry.addSvgIcon(‘别名‘, domSanitizer.bypassSecurityTrustResourceUrl(‘svg资源路径‘));

    别名 -> 在md-icon组件中需要用到

    svg资源路径 -> 别名对应的那个svg图片所在的路径

  2.7 在使用矢量图作为图标的组件所在的模块中引入HttpModule模块

    原因:利用矢量图作为图标是需要依赖HttpModule

import { HttpModule } from ‘@angular/http‘;

  2.8 在需要用svg图片作为图标展示的地方利用md-icon组件进行显示

<md-icon svgIcon="glasses"></md-icon>

  代码解释:<md-icon svgIcon="别名"></md-icon>

    别名就是svg资源对应的别名,是开发者自定义的

  技巧:使用md-icon将svg图片作为图标显示时别名是svgIcon属性的值;使用md-icon将material提供的图标进行显示时别名是md-icon组件的value值

  

3 使用svg图作为图标的改进方案

  3.1 每一个组件都必须导入MdIconRegistry和DomSanitizer ,而且还必须对svg图片资源进行注册,最严重的是无法进行复用

  3.2 解决办法:

    将svg图片资源注册单独拿出来用一个方法实现,然后将这个方法放到一个核心模块中,再将这个核心模块导入到主模块中

  3.3 svg图片注册方法

import { MdIconRegistry } from ‘@angular/material‘;
import { DomSanitizer } from ‘@angular/platform-browser‘; 

export const loadSvgResources = (mdIconRegistry: MdIconRegistry, domSanitizer: DomSanitizer) => {
    mdIconRegistry.addSvgIcon(‘glasses‘, domSanitizer.bypassSecurityTrustResourceUrl(‘assets/svg/glasses.svg‘));
    mdIconRegistry.addSvgIcon(‘China‘, domSanitizer.bypassSecurityTrustResourceUrl(‘assets/svg/China.svg‘));
};

  3.4 将svg注册方法放到核心模块的构造函数中

    

import { NgModule, Optional, SkipSelf } from ‘@angular/core‘;
import { CommonModule } from ‘@angular/common‘;

import { MdIconRegistry } from ‘@angular/material‘;
import { DomSanitizer } from ‘@angular/platform-browser‘;
import { loadSvgResources } from ‘../utils/svg.util‘;

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: []
})
export class CoreModule {
  constructor(
    @Optional() @SkipSelf() parent: CoreModule,
    mdIconRegistry: MdIconRegistry,
    domSanitizer: DomSanitizer
  ) {
    if (parent) {
      throw new Error(‘核心模块已经存在,只能加载一次‘);
    }
    loadSvgResources(mdIconRegistry, domSanitizer);
  }
}

  3.5 通过主模块加载核心模块

    

import { BrowserModule } from ‘@angular/platform-browser‘;
import { NgModule } from ‘@angular/core‘;

import  { MdSidenavModule, MdToolbarModule, MdIconModule, MdButtonModule } from ‘@angular/material‘;

import { HttpModule } from ‘@angular/http‘;

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‘;
import { CoreModule } from ‘./core/core.module‘;

@NgModule({
  declarations: [
    AppComponent,
    TestComponent,
    HeaderComponent,
    MainComponent,
    FooterComponent,
    SidebarComponent
  ],
  imports: [
    CoreModule,
    BrowserModule,
    HttpModule,
    MdSidenavModule,
    MdToolbarModule,
    MdIconModule,
    MdButtonModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

  3.6 效果图如下

    

时间: 2024-10-10 09:01:35

Material使用02 图标MdIconModule、矢量图作为图标使用及改进的相关文章

jQuery---bootstrap的下载使用,栅格(12个格子),轮播图,矢量图字体图标,进度条,选项卡,标签,表达校验

jQuery---bootstrap的下载使用,栅格(12个格子),轮播图,矢量图字体图标,进度条,选项卡,标签,表达校验 一丶bootstrap的使用 下载资源文件: bootstrap官网 导入 // 1.导入样式 <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css"> // 2.导入bootstrap的js,依赖jquery,先导入jquer <script

iOS开发(1):设置APP的图标与启动图 | iOS图标的尺寸 | LaunchScreen的使用

每个APP都应该有自己的图标跟启动图. 这里介绍怎么设置iOS的APP的图标跟启动图. (1)图标 小程的xcode是10.0版本,设置图标的入口如下: 点击入口后,进到设置页面,如下: 可以看到有很多空位,在等着拉入图标,因为iphone与ipad,不同的系统,不同的机型尺寸,使用了一系列不同尺寸的图标. 如果最终要提交到appstore,而且这个APP主要是在iphone或ipod上运行的,那应该有下面截图中的图标(包括最上面看到一点点的图标): 每个位置的尺寸,可以计算出来,比如3x的60

WPF矢量图图标

WPF图标:矢量图 1.先把矢量图资源加载到窗体资源内 <Window.Resources>        <Style x:Key="PathSource" TargetType="Path">            <Setter Property="Stretch" Value="Fill"/>            <Setter Property="Fill&quo

阿里矢量图的应用--flex布局--vue中$router和$route的方法

1.阿里矢量图字体图标的用法 2.flex布局 display:flex:设置父容器为伸缩盒子,会使每一个子元素自动变成伸缩项 接着设置子元素主轴方向上的排列方式 justify-content: flex-start让子元素从父容器的起始位置开始排列: flex-end:让子元素从父容器的结束位置开始排列: ? center:让子元素从父容器的中间位置开始排列: ? space-between:左右对齐父容器的开始和结束,中间平均分页,产生相同的间距: ? space-around:将多余的空

如何制作行政区划矢量图(shp格式)

有时候想要一张shp格式的地方行政区划矢量图,但苦于网络资源有限,找得到的可能不够满足需求,更多时候是难以找到,这时唯有自力更生了!下面我将分享一种方法,通过用GIS软件创建shapefile文件并进行编辑描边,以达到目的. 工具/原料 ARCGIS10.2 行政区划图.jpg 添加图片 1 文件不能直接"打开".开启GIS后,选择标准工具条里的黑十字形图标,弹出"添加数据"对话框,找到你的图片并点击"添加",以此在软件添加图片. 2 在添加过程

app图标和启动图以及Images.xcassets

概述 项目是纯代码编写,到现在一直没有适配iPhone6和iPhone6 plus,今天做了一些准备工作,app图标和启动图片的适配.项目当时是Xcode5创建的,并设置了app图标和启动图片(iPhone4到iPhone5s的图片).后来升级到Xcode6,因为没有适配iPhone6,app图标和启动图片也一直没改动. App Icons and Launch Images 选择General找到App Icons and Launch Images General Xcode5也是在这个地方

在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)

在 Xcode 6 中使用矢量图( iPhone 6 置配 UI) (本文转载:http://iosdeveloper.diandian.com/post/2014-09-25/40063062789) iOS应用程序是一个图像主导的产品.在开发一个应用程序时,你需要各种尺寸的图标,你需要为每个图像文件制作一个@1x 尺寸和一个@2x尺寸.这样你的应用看上去才足够精美.但缺点是你必须单独生成这些文件.随着iPhone6和iPhone6 Plus的到来,这个问题变得更加让人头疼:@3x 资源. 幸

在xcode6中使用矢量图(iPhone6置配UI)

ios应用程序是一个图像主导的产品.在开发一个应用程序时,你需要各种尺寸的图标,你需要为每个图像文件制作一个@1x尺寸和一个@2x尺寸.这样你的应用看上去才足够精美.但缺点是你必须单独生成这些文件.随着iphone6和iphone6 Plus的到来,这个问题变得更加让人头疼:@3x 资源. 幸运的是,苹果在xcode6中提供了一些伟大的工具来管理这些资源.更好的是,这种方式也让你的应用程序能够运行在未来的ios设备上打下了基础.工具之一是xcode6和ios8支持以Storyboard(或xib

Android UI:矢量图使用

一.矢量图简介最近在进行Android App"瘦身 "的时候,了解到矢量图(VectorDrawable)相关概念.从Android5.0(API level 21)开始,有两个类支持矢量图:VectorDrawable和AnimatedVectorDrawable.VectorDrawable是一个矢量图,定义在一个XML文件中的点.线和曲线,和它们相关颜色的信息集合.AnimatedVectorDrawable是矢量图动画,使用多个XML文件而不是针对不同分辨率使用多个图片来实现