Blazor의 매개변수를 사용하여 부모 구성 요소에서 자식 구성 요소로 데이터를 전달하는 방법에 대해 설명합니다
Show Footer 체크박스를 체크하면 Card Footer가 표시되어야 하고 체크 해제 시에는 카드 바닥글이 숨겨져야 합니다.
이 페이지에는 2개의 blazor 구성 요소가 있습니다.
- EmployeeList Component(상위 구성 요소)
- DisplayEmployee Component(하위 구성 요소)
자식 구성 요소 클래스(DisplayEmployeeBase.cs)
- 이 클래스에는 2개의 속성(Employee 및 ShowFooter)만 있습니다.
- 둘 다 Parameter 속성으로 decorated 되어 있습니다.
- 이 속성을 사용하면 부모 구성 요소에서 값을 전달할 수 있습니다.
using EmployeeManagement.Models; using Microsoft.AspNetCore.Components; namespace EmployeeManagement.Web.Pages { public class DisplayEmployeeBase : ComponentBase { [Parameter] public Employee Employee { get; set; } [Parameter] public bool ShowFooter { get; set; } } }
Child Component View (DisplayEmployee.razor)
- 이 component 에는 @page 지시문이 없습니다 . 이 component 는 하위 구성 요소로만 사용할 것이기 때문에 의도적으로 생략했습니다. 우리는 이것이 라우팅 가능한 구성 요소가 되는 것을 원하지 않습니다. 즉, 브라우저에서 URL을 사용하여 이 component 에 접근할 수 있기를 원하지 않습니다.
- 이 구성 요소는 Employee 속성에 바인딩되어 직원 세부 정보를 표시합니다. 또한 ShowFooter bool 속성을 사용하여 바닥글을 표시하거나 숨깁니다.
- 이 두 속성(Employee 및 ShowFooter)의 값은 상위 구성 요소(EmployeeList 구성 요소)에 의해 전달됩니다.
@inherits DisplayEmployeeBase <div class="card m-3" style="min-width: 18rem; max-width:30.5%;"> <div class="card-header"> <h3>@Employee.FirstName @Employee.LastName</h3> </div> <img class="card-img-top imageThumbnail" src="@Employee.PhotoPath" /> @if (ShowFooter) { <div class="card-footer text-center"> <a href="@($"employeedetails/{Employee.EmployeeId}")" class="btn btn-primary m-1">View</a> <a href="#" class="btn btn-primary m-1">Edit</a> <a href="#" class="btn btn-danger m-1">Delete</a> </div> } </div>
Parent Component Class (EmployeeListBase.cs)
- 이 상위 구성 요소(EmployeeList)의 주요 책임은 REST API를 호출하여 직원 목록을 검색하는 것입니다.
- ShowFooter 부울 속성 도 있습니다 . 보기의 바닥글 표시 확인란은 이 속성에 바인딩됩니다.
using EmployeeManagement.Models; using EmployeeManagement.Web.Services; using Microsoft.AspNetCore.Components; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EmployeeManagement.Web.Pages { public class EmployeeListBase : ComponentBase { [Inject] public IEmployeeService EmployeeService { get; set; } public IEnumerable<Employee> Employees { get; set; } public bool ShowFooter { get; set; } = true; protected override async Task OnInitializedAsync() { Employees = (await EmployeeService.GetEmployees()).ToList(); } } }
Parent Component View (EmployeeList.razor)
- 이 부모 구성 요소는 직원 목록을 반복하면서 Employee 속성을 사용하여 직원 개체를 자식 구성 요소에 전달합니다.
- ShowFooter 값 도 상위 구성 요소에서 하위 구성 요소로 전달됩니다.
- 이 두 속성(Employee 및 ShowFooter)은 자식 구성 요소의 [Parameter] 속성 으로 decorate 됩니다 . 이렇게 하면 부모 구성 요소가 이 두 속성에 값을 전달할 수 있습니다.
@page "/" @inherits EmployeeListBase <h3>Employee List</h3> <input type="checkbox" id="showFooter" @bind="ShowFooter" /> <label for="showFooter">Show Footer</label> @if (Employees == null) { <div class="spinner"></div> } else { <div class="card-deck"> @foreach (var employee in Employees) { <DisplayEmployee Employee="employee" ShowFooter="ShowFooter"> </DisplayEmployee> } </div> }