J'ai besoin de appeler function
dans un autre contrôleur dans ionic 2
, est-ce possible?
ci-dessous mon code et je veux appeler loadPeople
dans le contrôleur de tabulation.
home.ts
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {PeopleService} from '../../providers/people-service/people-service';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(public navCtrl: NavController,public peopleService: PeopleService) {
this.loadPeople();
}
loadPeople(){
this.peopleService.load()
.then(data => {
this.people = data;
});
}
}
tabs.ts
import { Component } from '@angular/core';
import { HomePage } from '../home/home';
import { AboutPage } from '../about/about';
import { ContactPage } from '../contact/contact';
@Component({
templateUrl: 'tabs.html'
})
export class TabsPage {
// this tells the tabs component which Pages
// should be each tab's root Page
tab1Root: any = HomePage;
tab2Root: any = AboutPage;
tab3Root: any = ContactPage;
constructor() {
}
}
dans tabs.ts je veux appeler la fonction loadPeople
sur onglet sélectionné , comment puis-je faire cela?
Il y a plusieurs options. Une solution consiste à placer votre fonction loadPeople()
dans une classe service , accessible à partir de tous les composants.
Une autre méthode consiste à utiliser Ionic Events pour déclencher des appels de fonction entre composants. Par exemple, si la sélection d'un onglet appelle une fonction tabSelected()
, vous pouvez déclencher un événement dans cette fonction:
tabSelected() {
this.events.publish('functionCall:tabSelected', anyAdditionalData);
}
et écoutez-le dans home.ts
et appelez loadPeople()
si l'événement a été déclenché:
this.events.subscribe('functionCall:tabSelected', eventData => {
this.loadPeople();
});
Vous pouvez même envoyer des données avec l'événement (ici: anyAdditionalData
).
Tout ce que vous avez à faire est de définir la fonction comme static et d’appeler la fonction avec le nom de la classe.
par exemple:
class A{
static f1(){
console.log("funtion1");
}
}
class B{
classA.f1();
}
J'espère que ça va marcher