아래 그림과 같이 Blazor loading indicator 표시하는 방법입니다.
Employee 목록 component
EmployeeList 구성 요소와 같은 구성 요소는 서버에서 비동기적으로 데이터를 검색합니다.
일반적으로 비동기 작업인 서버 측 서비스를 호출하여 데이터베이스에서 직원을 검색합니다.
구성 요소가 렌더링될 때까지 이 비동기 작업이 완료되지 않았을 수 있습니다.
이는 Employees 속성이 null일 수 있고 NullReference 예외가 발생할 수 있음을 의미합니다.
EmployeeListBase.cs
public class EmployeeListBase : ComponentBase { public IEnumerable<Employee> Employees { get; set; } protected override async Task OnInitializedAsync() { await Task.Run(LoadEmployees); } private void LoadEmployees() { System.Threading.Thread.Sleep(2000); // Retrieve data from the server and initialize // Employees property which the View will bind } }
Employees 속성이 null 인 동안 로딩바가 표시됩니다. 비동기 작업이 완료되고 직원 데이터가 채워지는 즉시 직원 목록이 표시됩니다.
EmployeeList.razor
@if (Employees == null) { <div class="spinner"></div> } else { <div class="card-deck"> @foreach (var employee in Employees) { <div class="card m-3"> <div class="card-header"> <h3>@employee.FirstName @employee.LastName</h3> </div> <img class="card-img-top imageThumbnail" src="@employee.PhotoPath" /> </div> } </div> }
loading indicator 디자인을 하기위해 CSS 를 사용하고 있습니다. wwwroot/css/site.css 파일 에 다음 CSS를 배치합니다 . 스피너의 모양과 느낌을 응용 프로그램 페이지와 일치시키려면 스피너 클래스에서 그에 따라 css 속성을 변경할 수 있습니다.
css 에서 스피너 색상을 Red 로 변경하려면 border-top 속성을 16px solid red 로 설정합니다 .
.spinner { border: 16px solid silver; border-top: 16px solid #337AB7; border-radius: 50%; width: 80px; height: 80px; animation: spin 700ms linear infinite; top: 40%; left: 55%; position: absolute; } @keyframes spin { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }