2017-02-17 7 views
0

私のマシンで新しいCordova Pluginを作成しました。それから私のプロジェクトに追加しました。そのプラグインを呼び出すとうまくいきます。今、私はプラグインのための構造化された呼び出し元を作ろうとしました。私はプロバイダを作成しましたが、問題は私のコントローラクラスからプラグイン関数を呼び出す方法がわかりません。以下は私のサンプルコードです。イオン2:コントローラクラスのプロバイダ機能を呼び出す方法

プロバイダ:私の-service.ts

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs/add/operator/map'; 

declare let myPlugin: any; 

@Injectable() 
export class MyService { 

    constructor(public http: Http) { 
    console.log('Hello MyService Provider'); 
    } 

    public myFunction() { 
    myPlugin.myPluginFunction(
     (data) => { 
     return data; 
     }, 

     (err) => { 
     return err; 
     }); 
    } 
} 

ページ:私の-page.ts

import { Component } from '@angular/core'; 
import { NavController, ViewController } from 'ionic-angular'; 

import { MyService } from '../../providers/my-service'; 

@Component({ 
    selector: 'page-my-page-ionic', 
    templateUrl: 'hello-ionic.html' 
}) 
export class MyPage { 
    constructor(private viewCtrl: ViewController, private myService: MyService) {} 

    ionViewWillEnter() { 

    //I tried to call like this 
    this.myService.myFunction().subscribe(
     data => { 
     alert("success"); 
     }, 
     error => { 
     alert("error"); 
     }); 
    } 
} 

それは私にこのエラーを返す - Property 'subscribe' does not exist on type 'void'.を私はどのように知りません私のプロバイダはsuccessまたはerrorを返すので、その関数を呼び出します。

答えて

1

私はあなたのmyFunction()は観測できないので、あなたはそれを購読できないと思います。データを直接返すだけです。あなたが観測としてそれを使用したい場合は、このような新しい観測可能を返し、

var data = this.myService.myFunction(); 
console.log("Data from plugin is :", data); 

あなたは、このケースでこのようにそれを使用することができます

public myFunction() { 
    return Observable.create(observer => { 
     myPlugin.myPluginFunction(
     (data) => { 
      observer.next(data); 
     }, 
     (err) => { 
      observer.next(data); 
     }); 
    }, 
    (err) => { 
     observer.error(err); 
    }); 
} 
+1

おかげ屋、その作業: )。だから今Observableの使い方を知っている。 –

+0

喜んで助けてください。 :) –

関連する問題