Generic Projection
2022. 4. 22. 00:00ㆍASPNET/Blazor
반응형
Content Projection은 일반 UI에 관한 것이고,
Generic Projection은 Content Projection을 더욱 확장하며,
UI와 관련된 Generic UI 및 Generic 데이터에 관한 것입니다.
RenderFragment<T> 형태로 template 을 정의 하고
(T 는 IPerson 의 Concreate class 인 Teacher 와 Student)
List<IPerson> 을 통해 InputData 의 data 들을 알맞은 Template 에 맞게 할당해서 처리 한다.
Data/IPerson.cs
public interface IPerson
{
public string Name { get; set; }
}
public class Student:IPerson
{
public string Name { get; set; } = "";
}
public class Teacher : IPerson
{
public string Name { get; set; } = "";
}
Pages/Child.razor
@using BlazorTutorial.Data
<div class="border border-success border-3 p-3">
<h3>Child</h3>
@foreach (var item in InputData)
{
<div class="border border-3 border-warning p-3 my-3">
@if (item is Teacher dog)
{
@TeacherTemplate?.Invoke(dog)
}
@if (item is Student student)
{
@StudentTemplate?.Invoke(student)
}
</div>
}
</div>
@code {
[Parameter]
public RenderFragment<Teacher>? TeacherTemplate { get; set; }
[Parameter]
public RenderFragment<Student>? StudentTemplate { get; set; }
[Parameter]
public List<IPerson> InputData { get; set; } = new();
}
Pages/Child.razor
Parent class 는 TeacherTemplate 과 StudentTemplate 을 통해 Template 에 값을 전달 한다.
InputData 에 Animals 를 전달하고 (List<IPerson>
@page "/interaction/generic-projection"
@using BlazorTutorial.Data
<div class="border border-3 border-primary p-3">
<h3>Parent</h3>
<Child InputData="Persons" Context="OutputFromProjection">
<TeacherTemplate>
<div>My name is @OutputFromProjection.Name, I am a teacher.</div>
</TeacherTemplate>
<StudentTemplate>
<div>My name is @OutputFromProjection.Name, I am a student.</div>
</StudentTemplate>
</Child>
</div>
@code {
public List<IPerson> Persons { get; set; } = new()
{
new Teacher() { Name = "Space Rich King" },
new Student() { Name = "World Rich King" },
new Student() { Name = "Musk" },
};
}
실행
관련영상
반응형
'ASPNET > Blazor' 카테고리의 다른 글
JavaScript Interop - CallingJavaScript 1/2 (0) | 2022.04.26 |
---|---|
JavaScript Interop - Add JavaScript in Blazor (0) | 2022.04.25 |
Content Projection (0) | 2022.04.21 |
Component 간 데이터 공유 - Transfer Service (0) | 2022.04.20 |
Component 간 데이터 공유 - Parameter (0) | 2022.04.19 |