Ionic 2: Как вызвать функцию провайдера в классе контроллера

Я создал новый плагин Cordova только на моей машине. Затем я добавил его в свой проект. Это работает нормально, когда я называю этот плагин. Теперь я попытался создать структурированную программу для моего плагина. Я создал провайдера для него, но проблема в том, что я не знаю, как вызвать функцию плагина из моего класса Controller. Ниже приведен мой пример кода.

Провайдер: my-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;
      });
  }
}

Страницы: my-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);
    });
}
Другие вопросы по тегам