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

方式一,编写全局declare文件

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

  1. <js-module name="SignaturePad" src="www/signaturePad.js">
  2. <clobbers target="SignaturePad"/>
  3. </js-module>
  1. var exec = require('cordova/exec');
  2.  
  3. exports.showSignature = function(arg0, success, error) {
  4. exec(success, error, "signaturePad", "showSignature", [arg0]);
  5. };

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

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

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

目录:

index.d.ts:

  1. interface SignaturePad {
  2. showSignature(option: SignaturePadOption, success: SignaturePadSuccessFunction, error: SignaturePadErrorFunction);
  3. }
  4.  
  5. interface SignaturePadOption {
  6. width?: number;
  7. height?: number;
  8. minWidth?: number;
  9. maxWidth?: number;
  10. penColor?: string;
  11. }
  12.  
  13. interface SignaturePadSuccessFunction {
  14. (result: SignaturePadSuccessResult): void;
  15. }
  16.  
  17. interface SignaturePadSuccessResult {
  18. imageUrl: string;
  19. }
  20.  
  21. interface SignaturePadErrorFunction {
  22. (any): void;
  23. }
  24.  
  25. declare var SignaturePad: SignaturePad;

全局index.d.ts

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

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

  1. /**
  2. * Created by Z.JM on 2016/9/5.
  3. */
  4.  
  5. export class ZSSignaturePad {
  6.  
  7. static openSignaturePad(signaturePadOption: SignaturePadOption = {
  8. width: 1366,
  9. height: 768,
  10. minWidth: 1,
  11. maxWidth: 9,
  12. penColor: "#000000"
  13. }): Promise<any> {
  14.  
  15. return new Promise<any>((resolve, reject)=> {
  16. document.addEventListener("deviceready", ()=> {
  17.  
  18. try {
  19. SignaturePad.showSignature(signaturePadOption, (res)=> {
  20. resolve(res);
  21. }, (err)=> {
  22. reject(JSON.stringify(err));
  23. });
  24. } catch (e) {
  25. reject(JSON.stringify(e));
  26. }
  27.  
  28. }, false)
  29. });
  30.  
  31. }
  32. }

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

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

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

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

  1. 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. 2017年9月11日 梁勇 java教材 编程练习题 第二章 2.15 键盘 读取两个点的坐标值(小数),控制台输出两点间距离。

    package com.swift; import java.util.Scanner; public class PToP { public static void main(String[] ar ...

  2. Sum All Odd Fibonacci Numbers-freecodecamp算法题目

    Sum All Odd Fibonacci Numbers 1.要求 给一个正整数num,返回小于或等于num的斐波纳契奇数之和. 斐波纳契数列中的前几个数字是 1.1.2.3.5 和 8,随后的每一 ...

  3. 第七篇:suds.TypeNotFound: Type not found: '(string, http://schemas.xmlsoap.org/soap/encoding/, )'

    想要用Python的suds模块调用webservice地址做自动测试,但是找了很多方法都失败了,最终找到另外一个模块可以作为客户端访问服务器地址. 1.针对非安全的http from zeep im ...

  4. Linux系统kernel参数优化

    目录 iptables相关 单进程最大打开文件数限制 内核TCP参数方面 内核其他TCP参数说明 众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参 ...

  5. PHP 批量操作 Excel

    自己封装了一个批量操作excel文件的方法,通过xls文件地址集合遍历,第三个参数传入一个匿名函数用于每个需求的不同进行的操作,实例中我想要得到列表中含有折字的行,封装成sql语句返回. xls文件超 ...

  6. thinkphp3.2.3如何只改变地址url中的某一个分隔符,其它保持不变

    今天教大家一个关于使用thinkphp3.2.3改变只改变地址url中的某一个分隔符的方法,首先大家来看看这个地址! 它的原始地址应该是/Home/Index/index/page/2.html,那我 ...

  7. 初学js之多组图片切换实例

    需求是以上效果展示.话不多说,直接代码显示,不涉及代码优化.已实现功能为目的. 先看html部分: <body> <div class="dream" id=&q ...

  8. [Uva623]500!(高精)

    Description 求N! \(N \leq 1000\) Sample Input 10 30 50 100 Sample Output 10! 3628800 30! 265252859812 ...

  9. Redis实现之对象(一)

    对象 前面我们介绍了Redis的主要数据结构,如:简单动态字符串SDS.双端链表.字典.压缩列表.整数集合等.Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象 ...

  10. SXCPC2018 nucoj2007 和Mengjiji一起攻克难关

    problem #include <algorithm> #include <iostream> #include <cstdio> using namespace ...