Ich bin ein Anfänger in Angular 2, da ich meine App von Winkel 1 zu etwas effizienterem bewegen möchte. Und ich verstehe nicht, wie man eine Kommunikation zwischen zwei Komponenten zur Verfügung stellt. Mein Fall ist, denke ich besonders, weil ich einige Daten von meinem app.component.ts zu home.ts senden möchte. Diese beiden Klassen befinden sich nicht im selben Verzeichnis. HierKommunikation zwischen app.component.ts und einer anderen Komponente angular 2
ist die Architektur meiner App:
>src
> app
- app.component.ts //where the data are generated - 2 lateral menus
- app.html //html associated to app.component.ts
- app.module.ts
- app.scss
> pages
> home
- home.html //home page
- home.ts
- home.scss
Zuerst in der Datei app.html habe ich eine Taste:
<ion-menu [content]="content" side="left" id="menuParameter">
<ion-header>
<ion-toolbar color="default">
<ion-title>Menu1</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-item>
<ion-label>On/Off</ion-label>
<!-- click here to switch on/off -->
<ion-toggle color="danger" checked="false" [(ngModel)]="isToggled" (ionChange)="notify()"></ion-toggle>
</ion-item>
</ion-list>
</ion-content>
</ion-menu>
<ion-menu [content]="content" side="right" id="menuInformation">
<ion-header>
<ion-toolbar color="default">
<ion-title>Menu2</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
</ion-content>
</ion-menu>
<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>
Wenn auf diese Schaltfläche klicken, ertappe ich den Wert in den app.component.ts:
import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { HomePage } from '../pages/home/home';
@Component({
templateUrl: 'app.html'
})
export class AppComponent {
rootPage:any = HomePage;
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
platform.ready().then(() => {
statusBar.styleDefault();
splashScreen.hide();
this.isToggled = false;
});
}
public isToggled: boolean;
public notify() {
//i want to send this value to home.ts component !
console.log("Toggled: "+ this.isToggled);
}
}
Schließlich möchte ich, wenn möglich, diesen Wert in der Komponente namens home.ts zu bekommen:
import { Component } from '@angular/core';
import { Logger } from '../../app/logger.service'
import { HttpClient } from '@angular/common/http';
import { NavController, NavParams, MenuController } from 'ionic-angular';
import {TranslateService} from '@ngx-translate/core';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
/**
* Contain link with
*/
export class HomePage {
private logger:Logger = new Logger(this.constructor.name);
constructor(public translate: TranslateService, public navCtrl: NavController,
public navParams: NavParams,
public menu: MenuController, private httpClient:HttpClient) {
this.logger.log("instantiating HomePage()");
menu.enable(true);
translate.setDefaultLang('en');
translate.use('en');
}
openMenu(evt) {
if(evt === "main"){
this.menu.enable(true, 'menuParameter');
this.menu.enable(false, 'menuInformation');
}else{
this.menu.enable(true, 'menuInformation');
this.menu.enable(false, 'menuParameter');
}
this.menu.toggle();
}
//method to get the value catched in app.component.ts that is to say the button value (true or False)!
}
Vielen Dank im Voraus
JP
https://angular.io/guide/component-interaction – jonrsharpe
gibt es kein Erbe auch immer in meinem Code – Alex99
Die oben stellt auch Verfahren dafür. Wenn sie sich in völlig separaten * Apps * befinden, sollten sie über eine externe API kommunizieren. – jonrsharpe