Ich verwende ein Nativescript (Angular 2) TabView mit zwei TabItems. Das XML ist in drei Dateien unterteilt. Eine, die das TabView und zwei andere für jedes TabItem enthält. Daher habe ich auch drei TypeScript-Komponenten.Brand Nativescript Tabitem-Ereignis, wenn Tabitem ausgewählt wird
Momentan lade ich Daten in der OnInit-Methode des zweiten TabItems. Das Problem ist, dass diese Aktion bereits passiert, wenn das erste TabItem der TabView angezeigt/geladen wird. Was ist die beste Vorgehensweise, um diese Daten nur zu laden, wenn das zweite TabItem ausgewählt ist?
Dies ist mein (verkürzt) Code:
home.page.html:
<ActionBar title="Home"></ActionBar>
<TabView #tabview (selectedIndexChanged)="tabIndexChanged($event)" toggleNavButton>
<StackLayout *tabItem="{title: 'Tab 1'}">
<tab1></tab1>
</StackLayout>
<StackLayout *tabItem="{title: 'Tab 2'}">
<tab2></tab2>
</StackLayout>
</TabView>
home.page.ts:
import {Component} from "@angular/core";
@Component({
selector: "home-page",
templateUrl: "./pages/home/home.page.html",
providers: []
})
export class HomePage {
public activeTab: string;
public constructor() {
}
public tabIndexChanged(e: any) {
switch (e.newIndex) {
case 0:
console.log(`Selected tab index: ${e.newIndex}`);
break;
case 1:
console.log(`Selected tab index: ${e.newIndex}`);
break;
default:
break;
}
}
}
tab1.tab.html:
<StackLayout orientation="vertical" class="p-20">
<Label text="Tab 1"></Label>
</StackLayout>
tab1.tab.ts:
import { Component, OnInit } from "@angular/core";
@Component({
selector: "tab1",
templateUrl: "./pages/partials/tab1.tab.html",
providers: []
})
export class Tab1 implements OnInit {
public constructor() {}
public ngOnInit() {
console.log("init Tab 1");
}
}
tab2.tab.html:
<StackLayout orientation="vertical" class="p-20">
<Label text="Tab 2"></Label>
</StackLayout>
tab2.tab.ts:
import { Component, OnInit } from "@angular/core";
@Component({
selector: "tab2",
templateUrl: "./pages/partials/tab2.tab.html",
providers: []
})
export class Tab2 implements OnInit {
public constructor() {}
public ngOnInit() {
console.log("init Tab 2");
this.getSomeDataViaHttp();
}
private getSomeDataViaHttp() {
//getting data from an API
}
}
Gibt es ein Schräg 2/Nativescript anderes Ereignis als onInit, die hier helfen würde? Oder sollte ich die Methode tabIndexChanged in der home.page.ts dafür verwenden? Oder setzen Sie die gesamte Logik und das XML für das TabView zurück in eine XML-Datei und eine ts-Datei? Was ist die beste Vorgehensweise?