2017-02-17 7 views
0

Я создал новый плагин Cordova только на своей машине. Затем я добавил его в свой проект. Он работает нормально, когда я называю этот плагин. Теперь я попытался создать структурированный вызывающий абонент для моего плагина. Я создал Провайдера для него, но проблема в том, что я не знаю, как вызвать мою функцию плагина из моего класса Controller. Ниже приведен пример кода.Ionic 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); 

Если вы хотите использовать его в качестве Observable, вернуть новый наблюдаемым как это:

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

Thanks я, его работы:). Итак, теперь я знаю, как использовать Observable. –

+0

Рад помочь. :) –