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);
});
}