728x90
반응형
소스링크 : https://github.com/BigExecution/BlazorWASM.git
Blazor WebAssembly 앱 생성 시,
자동으로 세팅되는 Weather forecast 페이지 하단에 날짜별 온도를 나타내는 구글차트를 추가해보자.
1. index.html 파일에 google chart 스크립트 태그 추가
<script src="_framework/blazor.webassembly.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script>
google.charts.load('current', { packages: ['corechart', 'line'] });
</script>
2. graph.js 파일 추가
function setGrowthGraph(data) {
var dt = new google.visualization.DataTable();
dt.addColumn('string', 'Date');
dt.addColumn('number', 'Temp. (C)');
dt.addColumn('number', 'Temp. (F)');
dt.addRows([
...data
]);
// pointVisible, pointSize로 라인 차트에 동그라미 표시합니다.
// Set chart options
var options = {
'title': '',
pointsVisible: true,
pointSize: '11px',
legend: 'none',
colors: ['#F2994A', '#5DB682']
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(dt, options);
}
export function drawGrowthGraph(data) {
google.charts.setOnLoadCallback(setGrowthGraph(data))
}
3. FetchData.razor에 그래프를 표시할 div 태그 추가
<div id="chart_div" style="height: 320px;"></div>
4. FetchData.razor C# 코드로 graph.js 파일의 drawGrowthGraph 함수를 호출하고 날씨 데이터를 전달하기
@code {
private WeatherForecast[] forecasts;
private Task<IJSObjectReference> _moduleGraph;
private Task<IJSObjectReference> ModuleGraph => _moduleGraph ??= _js.InvokeAsync<IJSObjectReference>("import", "./js/graph.js").AsTask();
protected override async Task OnInitializedAsync()
{
Http.BaseAddress = new Uri(NavigationManager.BaseUri);
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("/sample-data/weather.json");
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
var moduleGraph = await ModuleGraph;
ArrayList points = new ArrayList();
foreach (var item in forecasts)
{
object[] array1 = new object[] { item.Date.ToShortDateString(), item.TemperatureC, item.TemperatureF };
points.Add(array1);
}
await moduleGraph.InvokeVoidAsync("drawGrowthGraph", points);
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
}
728x90
반응형
'Blazor' 카테고리의 다른 글
Blazor Sever VS Blazor WebAssembly 장단점 (1) | 2021.10.02 |
---|---|
Blazor WASM] LayerAlertComponent, LayerConfirmComponent (0) | 2021.09.28 |
Blazor WASM] REST API, DropDownList onchange 데이터 연동 (0) | 2021.09.16 |
Blazor WASM] REST API, API로 리스트 가져와서 뿌려주기 (0) | 2021.09.16 |
Blazor WASM] ILogger, 로깅 사용하기 (0) | 2021.09.09 |
댓글