Blazor 5x - قسمت هشتم - مبانی Blazor - بخش 5 - تامین محتوای نمایشی کامپوننتهای فرزند توسط کامپوننت والد
نویسنده: وحید نصیری
تاریخ: ۱۳۹۹/۱۲/۱۴ ۱۱:۴۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
<Comp1>This is a content coming from the parent</Comp1>
@page "/ParentComponent"
<h1 class="text-danger">Parent Child Component</h1>
<ChildComponent Title="This title is passed as a parameter from the Parent Component">
A `Render Fragment` from the parent!
</ChildComponent>
<ChildComponent Title="This is the second child component"></ChildComponent>
@code {
} <li class="nav-item px-3">
<NavLink class="nav-link" href="ParentComponent">
<span class="oi oi-list-rich" aria-hidden="true"></span> Parent/Child Relation
</NavLink>
</li> <div>
<div class="alert alert-info">@Title</div>
<div class="alert alert-success">
@if (ChildContent == null)
{
<span> Hello, from Empty Render Fragment </span>
}
else
{
<span>@ChildContent</span>
}
</div>
</div>
@code {
[Parameter]
public string Title { get; set; }
[Parameter]
public RenderFragment ChildContent { get; set; }
}
<button class="btn btn-danger"
@onclick="@(() => OnClickBtnMethod.InvokeAsync((1, "A message from child!")))">
Show a message from the child!
</button>
@code {
// ...
[Parameter]
public EventCallback<(int, string)> OnClickBtnMethod { get; set; }
} @page "/ParentComponent"
<h1 class="text-danger">Parent Child Component</h1>
<ChildComponent
OnClickBtnMethod="ShowMessage"
Title="This title is passed as a parameter from the Parent Component">
A `Render Fragment` from the parent!
</ChildComponent>
<ChildComponent Title="This is the second child component">
<p><b>@MessageText</b></p>
</ChildComponent>
@code {
string MessageText = "";
private void ShowMessage((int Value, string Message) args)
{
MessageText = args.Message;
}
} @code {
// ...
[Parameter]
public RenderFragment ChildContent { get; set; }
[Parameter]
public RenderFragment DangerChildContent { get; set; }
} <ChildComponent
OnClickBtnMethod="ShowMessage"
Title="This title is passed as a parameter from the Parent Component">
<ChildContent>
A `Render Fragment` from the parent!
</ChildContent>
<DangerChildContent>
A danger content from the parent!
</DangerChildContent>
</ChildComponent> @if(DangerChildContent == null)
{
@if (ChildContent == null)
{
<span> Hello, from Empty Render Fragment </span>
}
else
{
<span>@ChildContent</span>
}
}
else
{
<span>@DangerChildContent</span>
}
import React from "react";
const Rentals = () => {
return <h1>Rentals</h1>;
};
export default Rentals; @page "/razor"
@template
@ItemTemplate(emp)
@code {
RenderFragment template = @<p>The time is @DateTime.Now.</p>;
RenderFragment<Employee> ItemTemplate = (item) => @<p>Employee name is @item.Name.</p>;
Employee emp = new Employee { Name = "Test" };
public class Employee
{
public string Name;
}
} @page "/"
@CreateDynamicComponent()
@code {
RenderFragment CreateDynamicComponent() => builder =>
{
builder.OpenComponent(0, typeof(SurveyPrompt));
builder.AddAttribute(1, "Title", "Some title");
builder.CloseComponent();
};
} <AuthorizeView>
<Authorized>
Hello, @context.User.Identity.Name!
</Authorized>
</AuthorizeView> @typeparam Titem
<table class="table">
<thead>
<tr>@TableHeader</tr>
</thead>
<tbody>
@foreach (var item in Items)
{
<tr>@RowTemplate(item)</tr>
}
</tbody>
</table>
@code {
[Parameter]
public RenderFragment TableHeader { get; set; }
[Parameter]
public RenderFragment<TItem> RowTemplate { get; set; }
[Parameter]
public IReadOnlyList<TItem> Items { get; set; }
} @page "/pets"
<h1>Pets</h1>
<TableTemplate Items="pets">
<TableHeader>
<th>ID</th>
<th>Name</th>
</TableHeader>
<RowTemplate>
<td>@context.PetId</td>
<td>@context.Name</td>
</RowTemplate>
</TableTemplate>
@code {
private List<Pet> pets = new()
{
new Pet { PetId = 2, Name = "Mr. Bigglesworth" },
new Pet { PetId = 4, Name = "Salem Saberhagen" },
new Pet { PetId = 7, Name = "K-9" }
};
private class Pet
{
public int PetId { get; set; }
public string Name { get; set; }
}
} <TableTemplate Items="pets" TItem="Pet">
<SomeGenericComponent TParam1="Person" TParam2="Supplier" TItem=etc/>
<TableTemplate Items="pets" Context="pet">
<TableHeader>
<th>ID</th>
<th>Name</th>
</TableHeader>
<RowTemplate>
<td>@pet.PetId</td>
<td>@pet.Name</td>
</RowTemplate>
</TableTemplate> <TableTemplate Items="pets">
<TableHeader>
<th>ID</th>
<th>Name</th>
</TableHeader>
<RowTemplate Context="pet">
<td>@pet.PetId</td>
<td>@pet.Name</td>
</RowTemplate>
</TableTemplate> @if(someValue is null)
{
<p>Loading..</p>
}
else
{
// show actual content
}
@code {
SomeClass someValue;
} /* shows a loading gif/text if a value is null */
@if (Value == null)
{
<div><img src="/img/SmallLoader.gif" alt="loading" /> Loading</div>
}
else
{
@ChildContent
}
@code {
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public object Value { get; set; }
} <Loading Value="someValue"> <p>Content goes here</p> </Loading>
@using Microsoft.Extensions.Hosting
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment env
@if (isDevelopment)
{
@ChildContent
}
@code {
[Parameter] public RenderFragment ChildContent { get; set; }
bool isDevelopment = false;
protected override void OnInitialized()
{
isDevelopment = env.IsDevelopment();
}
} <DevOnly>
<p>Show some debugging info here!</p>
</DevOnly>