Blazor loading indicator 표시

아래 그림과 같이 Blazor loading indicator 표시하는 방법입니다.

Display loading indicator in blazor

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)
    }
}

답글 남기기