cordova机制我在此就不提了,我们使用Typescript调用cordova plugin就如同调用第三方库是一个道理,那么这里就少不了书写declare文件,下面我就把几种封装调用的几种方式介绍一下。

方式一,编写全局declare文件

现在我们有一个“残峰(我的同事)”封装好的签名版插件,cordova plugin暴露的JS配置如下:

<js-module name="SignaturePad" src="www/signaturePad.js">
<clobbers target="SignaturePad"/>
</js-module>
var exec = require('cordova/exec');

exports.showSignature = function(arg0, success, error) {
exec(success, error, "signaturePad", "showSignature", [arg0]);
};

下面我们就开始书写declare文件了,在此之前我们看一些ionic2工程目录,有一个typings

这个及时全局declare文件的生命集合,这里就能解释为什么我们使用ES6语法编译不会报错了。

我们在globals目录下,建立一个cordova-plugin,以后我们的cordova plugin声明都可以写在这里

目录:

index.d.ts:

interface SignaturePad {
showSignature(option: SignaturePadOption, success: SignaturePadSuccessFunction, error: SignaturePadErrorFunction);
} interface SignaturePadOption {
width?: number;
height?: number;
minWidth?: number;
maxWidth?: number;
penColor?: string;
} interface SignaturePadSuccessFunction {
(result: SignaturePadSuccessResult): void;
} interface SignaturePadSuccessResult {
imageUrl: string;
} interface SignaturePadErrorFunction {
(any): void;
} declare var SignaturePad: SignaturePad;

全局index.d.ts

/// <reference path="globals/es6-shim/index.d.ts" />
/// <reference path="globals/cordova-plugin/signature-pad/index.d.ts" />

这个时候我们就可以正常的调用插件了,signaturePad.ts:

/**
* Created by Z.JM on 2016/9/5.
*/ export class ZSSignaturePad { static openSignaturePad(signaturePadOption: SignaturePadOption = {
width: 1366,
height: 768,
minWidth: 1,
maxWidth: 9,
penColor: "#000000"
}): Promise<any> { return new Promise<any>((resolve, reject)=> {
document.addEventListener("deviceready", ()=> { try {
SignaturePad.showSignature(signaturePadOption, (res)=> {
resolve(res);
}, (err)=> {
reject(JSON.stringify(err));
});
} catch (e) {
reject(JSON.stringify(e));
} }, false)
}); }
}

其实在这里还有一个hack的方式,我们没有必要在全局declar里来声明,毕竟我们不是封装类库,完全可以把声明文件与插件封装放在一起:

当然这个时候你需要把声明依赖写在ts文件的顶部(必须是顶部)

/// <reference path="./index.d.ts"/>

如果不考虑规范性完全可以这么写:

declare var SignaturePad: any;

方式二、模仿ionic native

如果你一开始接触ionic2,不会调用自定义插件,那么聪明的你一定会有一个疑问,ionic native是怎么调用的?我们模仿不就行了,那肯定会看源码或者git, https://github.com/driftyco/ionic-native 。

说道这,大家估计就已经明白了,好了好了,大家都散了吧。

Ionic2 调用自定义插件之研究的更多相关文章

  1. ionic2/cordova自定义插件集成aar包

    一.准备自定义插件 1. 准备:安装plugman npm install -g plugman 2. 新建组件 plugman create --name MyPlugin --plugin_id ...

  2. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  3. Ionic2中集成腾讯Bugly之自定义插件

    Ionic2混合开发,入坑系列:Ionic2中集成腾讯Bugly之自定义插件 1.编写Bugly.js代码 var exec = require('cordova/exec'); module.exp ...

  4. CKEditor在线编辑器增加一个自定义插件

    CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...

  5. Qt之自定义插件(for Qt Designer)

    之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...

  6. Ionic2 调用Custom Cordova Plugin方法

    APP升级到Ionic2之后,如何调用自己写的pulgin,一直测试不成功,现记录这一经过. plugin目前可以分为3类,A类是ionic-native自带的,可以直接导入Typescript类,直 ...

  7. Cordova应用的JavaScript代码和自定义插件代码的调试

    我之前写过三篇Cordova相关的技术文章.当我们使用Cordova将自己开发的前端应用打包安装到手机上后,可能会遇到需要调试Cordova应用的时候. 本文就介绍Cordova应用的调试步骤. 如果 ...

  8. 深入学习jQuery自定义插件

    原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数);      $(‘#id’).myPlugin(o ...

  9. jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)

    上一篇记录了BaiduTemplate模板引擎使用示例附源码,在此基础上对使用方法进行了封装 自定义插件jajaxrefresh.js 代码如下: //闭包限定命名空间 (function ($) { ...

随机推荐

  1. 漫谈 Clustering (番外篇): Dimensionality Reduction

    由于总是有各种各样的杂事,这个系列的文章竟然一下子拖了好几个月,(实际上其他的日志我也写得比较少),现在决定还是先把这篇降维的日志写完.我甚至都以及忘记了在这个系列中之前有没有讲过“特征”(featu ...

  2. html5shiv.js的作用是

    解析 html5shiv主要解决HTML5提出的新的元素不被IE6-8识别,这些新元素不能作为父节点包裹子元素,并且不能应用CSS样式.让CSS 样式应用在未知元素上只需执行 document.cre ...

  3. js实现全选,反选,全不选

    思路:1.获取元素.2.用for循环历遍数组,把checkbox的checked设置为true即实现全选,把checkbox的checked设置为false即实现不选.3.通过if判断,如果check ...

  4. tomcat服务器用Servlet类查找磁盘文件上的Json信息,如果匹配则在浏览器上显示出该条内容的全部信息

    package com.swift; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOE ...

  5. response.setContentType("text/html;charset=utf-8")后依然乱码的解决方法

    从浏览器获取数据到服务器,服务器将得到数据再显示在浏览器上英文字母正常显示,中文字符乱码的问题,已经使用了 response.setContentType("text/html;charse ...

  6. 什么是 TCP/IP?

    前言: 精通 TCP/IP,熟练使用 Socket 进行网路编程. 看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这 ...

  7. python 基础 for else

    for one in many_list: if "k" in one: print "在里面" break else: print "没有在里面&q ...

  8. 最新Python3.6从入门到高级进阶实战视频教程

    点击了解更多Python课程>>> 最新Python3.6从入门到高级进阶实战视频教程 第1篇 Python入门导学 第2篇 Python环境装置 第3篇 了解什么是写代码与Pyth ...

  9. 可怕的万圣节 Linux 命令

    虽然现在不是万圣节,也可以关注一下 Linux 可怕的一面.什么命令可能会显示鬼.巫婆和僵尸的图像?哪个会鼓励"不给糖果就捣蛋"的精神? crypt 好吧,我们一直看到 crypt ...

  10. Python基础函数必学

    我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = 73.1 ...