import type { BreadcrumbItem } from '../app/breadcrumb'; import type { AppMenuItem } from '../app/menu'; import { toNative } from 'vue-facing-decorator'; import { Component } from '../../app/vuetsx'; import { PowerduckViewModelBase } from '../../common/base-component'; interface WeatherForecast { dateFormatted: string; temperatureC: number; temperatureF: number; summary: string; } @Component class FetchDataComponentComponent extends PowerduckViewModelBase { protected breadcrumbItems: BreadcrumbItem[] = []; protected menuItems: AppMenuItem[] = []; forecasts: WeatherForecast[] = []; loading: boolean = true; async mounted() { await this.refreshData(); } async refreshData() { this.forecasts = await this.getDataAsync(); } async getDataAsync() { this.loading = true; const response = await fetch('/api/spapoc/SampleData/WeatherForecasts'); const data = response.json(); this.loading = false; return data; } render(h) { return (

Weather forecast

This component demonstrates fetching data from the server.


{this.renderForecastsTable(h)}
); } renderForecastsTable(h) { if (!this.loading) { return ( {this.forecasts.map(forecast => ( ))}
Date Temp. (C) Temp. (F) Summary
{forecast.dateFormatted} {forecast.temperatureC} {forecast.temperatureF} {forecast.summary}
); } else { return (

Loading...

); } } } const FetchDataComponent = toNative(FetchDataComponentComponent); export default FetchDataComponent;