tns-template-master-detail-kinvey-ng
Version:
Master-detail interface to display collection of items from Kinvey and inspect and edit selected item properties.
79 lines (69 loc) • 3.2 kB
text/typescript
import { Component, OnInit } from "@angular/core";
import { RouterExtensions } from "nativescript-angular/router";
import { ListViewEventData } from "nativescript-ui-listview";
import { ObservableArray } from "tns-core-modules/data/observable-array";
import { Car } from "./shared/car.model";
import { CarService } from "./shared/car.service";
/* ***********************************************************
* This is the master list component in the master-detail structure.
* This component gets the data, passes it to the master view and displays it in a list.
* It also handles the navigation to the details page for each item.
*************************************************************/
({
selector: "CarsList",
templateUrl: "./car-list.component.html",
styleUrls: ["./car-list.component.scss"]
})
export class CarListComponent implements OnInit {
private _isLoading: boolean = false;
private _cars: ObservableArray<Car> = new ObservableArray<Car>([]);
constructor(
private _carService: CarService,
private _routerExtensions: RouterExtensions
) { }
/* ***********************************************************
* Use the "ngOnInit" handler to get the data and assign it to the
* private property that holds it inside the component.
*************************************************************/
ngOnInit(): void {
this._isLoading = true;
/* ***********************************************************
* The data is retrieved remotely from FireBase.
* The actual data retrieval code is wrapped in a data service.
* Check out the service in cars/shared/car.service.ts
*************************************************************/
this._carService.load()
.then((cars: Array<Car>) => {
this._cars = new ObservableArray(cars);
this._isLoading = false;
})
.catch(() => {
this._isLoading = false;
});
}
get cars(): ObservableArray<Car> {
return this._cars;
}
get isLoading(): boolean {
return this._isLoading;
}
/* ***********************************************************
* Use the "itemTap" event handler of the <RadListView> to navigate to the
* item details page. Retrieve a reference for the data item (the id) and pass it
* to the item details page, so that it can identify which data item to display.
* Learn more about navigating with a parameter in this documentation article:
* http://docs.nativescript.org/angular/core-concepts/angular-navigation.html#passing-parameter
*************************************************************/
onCarItemTap(args: ListViewEventData): void {
const tappedCarItem = args.view.bindingContext;
this._routerExtensions.navigate(["/cars/car-detail", tappedCarItem.id],
{
animated: true,
transition: {
name: "slide",
duration: 200,
curve: "ease"
}
});
}
}