最近想找一套比较完整的基于Material风格的Angular2的控件库,有两个选择一个是Angular官方的Material2,但是这套库的DatePicker控件目前只能支持年月日,不支持时分秒,所以就找到本篇要介绍的Promact/md2。下面介绍一下如何进行集成。

1. 集成

在工程根目录执行如下命令,下载相关依赖:

npm install --save md2

然后在Module中引入如下Module:

import { Md2Module }  from 'md2';
@NgModule({
imports: [
...,
Md2Module,
],
...
})
export class AppModule { }

好了,不需要做任何其他的工作了,现在就可以是用来了。

具体的使用可以参照官方的实例,对应的代码

2. 兼容性问题

官方的声明看起来是复制的angular material2的声明,声称是支持IE11和Edge,但是实际上测试时有问题的,Tab和DatePicker会报错,Tooltip直接就是不能用的。

Tooltip暂时没有找解决方案,对于Tab和DatePicker在IE11和Edge浏览器下出错的解决方案如下。

2.1. md2的日期控件报错解决方案

解决方案:

在工程中找到如下文件:

node_modules\ionic-angular\tap-click\ripple.js, 修改如下方法:

RippleActivator.prototype._downAction = function (ev, activatableEle, startCoord) {
RippleActivator.prototype._upAction = function (ev, activatableEle, startCoord) {

将其中的如下代码:

if (rippleEle.classList.contains('button-effect')) {

修改为如下:

if (!!rippleEle && !!rippleEle.classList
&& !!rippleEle.classList.contains
&& rippleEle.classList.contains('button-effect')) {

2.2. md2的Tab控件报错解决方案

解决方案:

在工程中找到如下两个文件:

G:\ionicDemo\MyIonicProject\node_modules\md2\bundles\md2.umd.js
G:\ionicDemo\MyIonicProject\node_modules\md2\tabs\tabs.js

找到如下方法:

Md2Tabs.prototype.updatePagination

修改为:

Md2Tabs.prototype.updatePagination = function () {
var canvasWidth = this.element.root.clientWidth;
if(!!this.element.tabs.forEach){
this.element.tabs.forEach(function (tab) {
canvasWidth -= tab.offsetWidth;
});
}
this._shouldPaginate = canvasWidth < 0;
};

3. 部分控件独立集成

因为md2相对于angular官方的material2最大的优势就是DatePicker,其他控件在浏览器兼容性上没有material2好,除了上面第2节描述的问题外,在IE下有部分的动画效果消失了,使用起来有卡顿干,所以决定只引入md2的DatePicker控件,其他的使用material2的控件。

那么如何只引入DatePicker呢?

第1节集成中,我们import了如下module:

import { Md2Module }  from 'md2';

通过visual studio code代码跟踪,可以直接进入定义文件,定位到的文件是module.d.ts,进一步找到其实际的定义文件module.js,在这个文件中我们可以找到如下定义:

import { Md2AccordionModule } from './accordion/index';
import { Md2AutocompleteModule } from './autocomplete/index';
import { Md2ChipsModule } from './chips/index';
import { Md2CollapseModule } from './collapse/index';
import { Md2ColorpickerModule } from './colorpicker/index';
import { Md2DataTableModule } from './data-table/index';
import { Md2DatepickerModule } from './datepicker/index';
import { Md2DialogModule } from './dialog/index';
import { Md2MenuModule } from './menu/index';
import { Md2SelectModule } from './select/index';
import { Md2TabsModule } from './tabs/index';
import { Md2TagsModule } from './tags/index';
import { Md2ToastModule } from './toast/index';
import { Md2TooltipModule } from './tooltip/index';
import { PlatformModule } from './core/platform/index';
import { StyleModule } from './core/style/index';

这样我们就可以参照这里,需要哪个控件,引入哪个控件对应的module就可以了。

例如我们上面说的想单独引入DatePicker,那么就在自己工程的Module中添加如下Module的引用:

import { Md2DatepickerModule } from 'md2/datepicker/index';
@NgModule({
imports: [
...,
Md2DatepickerModule,
],
...
})
export class AppModule { }

附录一、问题处理

找不到@angular/animations

部分反映集成后报错,提示找不到@angular/animations,可以执行如下命令解决。

npm install @angular/animations --save

然后在app.module.ts中增加引入:

 import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
@NgModule({
...
imports: [
...
BrowserAnimationsModule,
...
],
...
})
export class AppModule {}

Angular2/Ionic2集成Promact/md2.md的更多相关文章

  1. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  2. angular2+ionic2架构介绍

    不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2+typescript 2. 项目结构 3. S ...

  3. 自动化打包 Jenkins 持续集成 Git Gradle MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. ionic2集成极光推送

    ionic2集成极光推送: ionic2api:https://ionicframework.com/docs/ 极光推送官网:https://www.jiguang.cn android-怎么注册极 ...

  5. Ionic2集成ngx-datatable,ng2-tree第三方控件.md

    1. 基本环境配置 1.1. 命令安装相应的依赖 1.2. 在Module定义中引入对应Module 1.3. 引入对应的CSS 2. 简单使用示例验证是否集成成功 2.1. ngx-datatabl ...

  6. Ionic2集成ArcGIS JavaScript API.md

    1. Ionic同原生ArcGIS JavaScript API结合 1.1. 安装esri-loader 在工程目录下命令行安装: npm install angular2-esri-loader ...

  7. ionic2集成sdk后,连接超时的问题

    这几天在测试app的时候,偶尔会发现集成的好视通sdk在进入会议室的时候出现连接超时的问题,一直卡在‘正在获取版本信息’的页面,经反复测试后这种现象主要出现在点击返回按钮和退出登录按钮的时候会出现,也 ...

  8. Ionic2中的Navigation.md

    1. 概述 为了能够得到同原生应用类似的导航效果,Ionic创建了几个navagation组件来实现pages之间的导航操作,这种导航跟原生Angular2中的route机制是不一样的,我们可以借助于 ...

  9. 【前端】Angular2 Ionic2 学习记录

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/angular2_ionic2.html 一.建立项目 ionic start ProductName super ...

随机推荐

  1. 【BZOJ3270】博物馆 概率DP 高斯消元

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  2. Android View 事件分发机制 源代码解析 (上)

    一直想写事件分发机制的文章,无论咋样,也得自己研究下事件分发的源代码.写出心得~ 首先我们先写个简单的样例来測试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个M ...

  3. 【HDOJ 5407】 CRB and Candies (大犇推导

    pid=5407">[HDOJ 5407] CRB and Candies 赛后看这题题解仅仅有满眼的迷茫------ g(N) = LCM(C(N,0),C(N,1),...,C(N ...

  4. 【Java】【Flume】Flume-NG启动过程源代码分析(一)

    从bin/flume 这个shell脚本能够看到Flume的起始于org.apache.flume.node.Application类,这是flume的main函数所在. main方法首先会先解析sh ...

  5. ORA-01119、ORA-27040

    SQL> alter tablespace DRSYS add datafile '/ora_data/drsys02.dbf' size 1000m;alter tablespace DRSY ...

  6. web.xml配置详解(转载)

    一.web.xml配置文件常用元素及其意义预览 1 <web-app> 2 3 <!--定义了WEB应用的名字--> 4 <display-name></di ...

  7. Python之Linux下的virtualenv

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...

  8. Elasticsearch开发环境搭建(Eclipse\MyEclipse + Maven)

    前提是, Elasticsearch 编程API入门系列---说在前面的话 Eclipse下Maven新建项目.自动打依赖jar包(包含普通项目和Web项目) setting.xml配置文件 如何在M ...

  9. accept-language

    Chrome: [zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4]Safari: [zh-tw]FF: [zh-TW,zh;q=0.8,en-US;q=0.5,en;q=0.3 ...

  10. C# 运算符 ?、??、?: 、?. 、 各种问号的用法和说明

    1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; 是正确的,int i=null; 编译器就会报错.为了使值类型也 ...