Ionic2 调用自定义插件之研究
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 调用自定义插件之研究的更多相关文章
- ionic2/cordova自定义插件集成aar包
一.准备自定义插件 1. 准备:安装plugman npm install -g plugman 2. 新建组件 plugman create --name MyPlugin --plugin_id ...
- Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...
- Ionic2中集成腾讯Bugly之自定义插件
Ionic2混合开发,入坑系列:Ionic2中集成腾讯Bugly之自定义插件 1.编写Bugly.js代码 var exec = require('cordova/exec'); module.exp ...
- CKEditor在线编辑器增加一个自定义插件
CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...
- Qt之自定义插件(for Qt Designer)
之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...
- Ionic2 调用Custom Cordova Plugin方法
APP升级到Ionic2之后,如何调用自己写的pulgin,一直测试不成功,现记录这一经过. plugin目前可以分为3类,A类是ionic-native自带的,可以直接导入Typescript类,直 ...
- Cordova应用的JavaScript代码和自定义插件代码的调试
我之前写过三篇Cordova相关的技术文章.当我们使用Cordova将自己开发的前端应用打包安装到手机上后,可能会遇到需要调试Cordova应用的时候. 本文就介绍Cordova应用的调试步骤. 如果 ...
- 深入学习jQuery自定义插件
原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数); $(‘#id’).myPlugin(o ...
- jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
上一篇记录了BaiduTemplate模板引擎使用示例附源码,在此基础上对使用方法进行了封装 自定义插件jajaxrefresh.js 代码如下: //闭包限定命名空间 (function ($) { ...
随机推荐
- 2017年9月11日 梁勇 java教材 编程练习题 第二章 2.15 键盘 读取两个点的坐标值(小数),控制台输出两点间距离。
package com.swift; import java.util.Scanner; public class PToP { public static void main(String[] ar ...
- Sum All Odd Fibonacci Numbers-freecodecamp算法题目
Sum All Odd Fibonacci Numbers 1.要求 给一个正整数num,返回小于或等于num的斐波纳契奇数之和. 斐波纳契数列中的前几个数字是 1.1.2.3.5 和 8,随后的每一 ...
- 第七篇:suds.TypeNotFound: Type not found: '(string, http://schemas.xmlsoap.org/soap/encoding/, )'
想要用Python的suds模块调用webservice地址做自动测试,但是找了很多方法都失败了,最终找到另外一个模块可以作为客户端访问服务器地址. 1.针对非安全的http from zeep im ...
- Linux系统kernel参数优化
目录 iptables相关 单进程最大打开文件数限制 内核TCP参数方面 内核其他TCP参数说明 众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参 ...
- PHP 批量操作 Excel
自己封装了一个批量操作excel文件的方法,通过xls文件地址集合遍历,第三个参数传入一个匿名函数用于每个需求的不同进行的操作,实例中我想要得到列表中含有折字的行,封装成sql语句返回. xls文件超 ...
- thinkphp3.2.3如何只改变地址url中的某一个分隔符,其它保持不变
今天教大家一个关于使用thinkphp3.2.3改变只改变地址url中的某一个分隔符的方法,首先大家来看看这个地址! 它的原始地址应该是/Home/Index/index/page/2.html,那我 ...
- 初学js之多组图片切换实例
需求是以上效果展示.话不多说,直接代码显示,不涉及代码优化.已实现功能为目的. 先看html部分: <body> <div class="dream" id=&q ...
- [Uva623]500!(高精)
Description 求N! \(N \leq 1000\) Sample Input 10 30 50 100 Sample Output 10! 3628800 30! 265252859812 ...
- Redis实现之对象(一)
对象 前面我们介绍了Redis的主要数据结构,如:简单动态字符串SDS.双端链表.字典.压缩列表.整数集合等.Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象 ...
- SXCPC2018 nucoj2007 和Mengjiji一起攻克难关
problem #include <algorithm> #include <iostream> #include <cstdio> using namespace ...