如何為Ionic添加plugin

一砸抛、新建cordova plugin項(xiàng)目评雌,項(xiàng)目工程結(jié)構(gòu)如下所示,主要包括三個文件: src直焙、www和plugin.xml景东。

cordova 工程結(jié)構(gòu)

1、src文件主要編寫不同平臺下的native代碼奔誓。Eg: android 和ios

/**
新建的類一定要繼承自CordovaPlugin類斤吐,并重寫execute方法
**/
public class LoadingPlugin extends CordovaPlugin {

    public ProgressDialog loadingDialog;
    public LayoutInflater inflater;
    public AlertDialog.Builder alertDialogBuilder;
    public AlertDialog alertDialog;
    private Handler handler = new Handler();
    private TextView text ;

    @Override
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {

        if ("showLoading".equals(action)) {
            this.createDialog(cordova.getActivity(), "loading...");
            callbackContext.success("showLoading success!");
            return true;
        } else if("dismissDialog".equals(action)) {
          this.dismissDialog();
          callbackContext.success("dismissDialog success!");
          return true;
        } else {
          callbackContext.error("get plugin error!");
          return false;
        }
    }
}

2、www文件中提供調(diào)用native代碼的接口厨喂,以供JavaScript代碼調(diào)用

var exec = require('cordova/exec');
exports.showLoading = function(msg, success, error) {
//五個參數(shù):成功的回調(diào)方法和措、失敗的回調(diào)方法、service蜕煌、action派阱、傳遞的參數(shù)
exec(success, error, "LoadingPlugin", "showLoading", [msg]);
}

3、plugin.xml文件主要作用是處理js文件與Android斜纪、ios等平臺的相關(guān)配置

<?xml version='1.0' encoding='utf-8'?>
<plugin id="expense-plugin-loading" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>LoadingPlugin</name>
    <!-- js-module標(biāo)簽:和Java文件交互的js文件贫母。屬性src就是www下面的js文件-->
    <js-module name="LoadingPlugin" src="www/LoadingPlugin.js"><clobbers target="loadingManager"/></js-module>

    <!--platform標(biāo)簽:為plugin添加的平臺,本文主要是開發(fā)Android平臺上的代碼-->
    <platform name="android">
      <!--config-file標(biāo)簽:將配置文件注入到Android工程中的config.xml中-->
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="LoadingPlugin">
            <param name="android-package" value="com.baiwangmaoyi.expense.LoadingPlugin"/>
            </feature>
        </config-file>
        <config-file parent="/*" target="AndroidManifest.xml">
        </config-file>
        <!--srource-file標(biāo)簽:將src下的文件復(fù)制到platform下相應(yīng)的工程目錄下-->
        <source-file src="src/android/LoadingPlugin.java" target-dir="src/com/baiwangmaoyi/expense"/>
        <source-file src="src/android/layout/loading_layout.xml" target-dir="res/layout" />
      </platform>
</plugin>

二盒刚、為Ionic添加所寫的Plugin

1腺劣、 cordova plugin add [path to your plugin]

2、編寫調(diào)用native文件的js代碼并將其封裝為.ts

文件名:ShowLoading.js

'use strict';
var {Observable} = require('rxjs/Rx');
var ShowLoading = (function(){
    function ShowLoading(){};
    ShowLoading.prototype.showLoading = function(msg){
        var promise = new Promise(function(resolve, reject){
            /**loadingManager是add plugin 時系統(tǒng)根據(jù)js-module中clobbers中設(shè)置的
             ** target值而生成的全局變量
             **showLoading為plugin工程中www下的.js文件中導(dǎo)出的方法名 **/
            loadingManager.showLoading(msg, function(data){
                resolve(data);
            }, function(err){
                reject(err);
            });
            // resolve("success");
        });
        return promise;
    };
    ShowLoading.prototype.dismissLoading = function(msg){
        var promise = new Promise(function(resolve, reject){
            loadingManager.dismissLoading('', function(data){
                resolve(data);   
            }, function(err){
                resolve(err);
            });
            // resolve("success");
        });
        return promise;
    };
    return ShowLoading;
    
}());

exports.ShowLoading = ShowLoading;

文件名:ShowLoading.d.ts, 封裝后的方法因块。

export declare class ShowLoading {
    showLoading(msg: string): Promise<any>;
    dismissLoading(msg: string): Promise<any>;
}

三橘原、在Ionic中.ts 文件中使用封裝后的方法:

 this.showLoading = new ShowLoading();
    this.showLoading.showLoading("loading").then(res => {
      this.showToast(res);
      console.log('success');
    }, err => {
      console.log('err',err);
      this.showToast(err);
    });

    setTimeout(() => {
      this.showLoading.dismissLoading('').then(res =>{
        this.showToast(res);
        console.log("dismiss",res);
      }, err => {
        this.showToast(err);
        console.log('dismiss',err);
      });
    },3000);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子趾断,更是在濱河造成了極大的恐慌寨辩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歼冰,死亡現(xiàn)場離奇詭異靡狞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隔嫡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門甸怕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腮恩,你說我怎么就攤上這事梢杭。” “怎么了秸滴?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵武契,是天一觀的道長。 經(jīng)常有香客問我荡含,道長咒唆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任释液,我火速辦了婚禮全释,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘误债。我一直安慰自己浸船,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布寝蹈。 她就那樣靜靜地躺著李命,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箫老。 梳的紋絲不亂的頭發(fā)上封字,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音槽惫,去河邊找鬼周叮。 笑死,一個胖子當(dāng)著我的面吹牛界斜,可吹牛的內(nèi)容都是我干的仿耽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼各薇,長吁一口氣:“原來是場噩夢啊……” “哼项贺!你這毒婦竟也來了君躺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤开缎,失蹤者是張志新(化名)和其女友劉穎棕叫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奕删,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俺泣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了完残。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伏钠。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谨设,靈堂內(nèi)的尸體忽然破棺而出熟掂,到底是詐尸還是另有隱情,我是刑警寧澤扎拣,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布赴肚,位于F島的核電站,受9級特大地震影響二蓝,放射性物質(zhì)發(fā)生泄漏誉券。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一侣夷、第九天 我趴在偏房一處隱蔽的房頂上張望横朋。 院中可真熱鬧,春花似錦百拓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厕九,卻和暖如春蓖捶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扁远。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工俊鱼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畅买。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓并闲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谷羞。 傳聞我的和親對象是個殘疾皇子帝火,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容