web-dev-qa-db-fra.com

fonction d'appel ionique 2 d'un autre contrôleur

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?

8
mahmoudismail

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).

16
Onno

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

2
AishApp