我已经通过谷歌找到了解决方案,当你可以达到的功能/价值,从孩子到家长,反过来,但不是从孩子到孩子。
父组件,子组件的容器
//PARENT
<h3>ParentComponent</h3>
<Child_1_Component></Child_1_Component>
<Child_2_Component></Child_2_Component>
<h3>Child_1_Component</h3>子用户输入了一些东西
//CHILD 1
<h1>User puts in something</h1>
<input type="text"/>
<button @onclick="@(() => getValue(10))"></button>
@code {
List<WhatEver> whatEvers = new List<WhatEver>();
public void getValue(int value)
{
var message = "something";
for (int i = 0; i < value; i++)
{
var whatever = new WhatEver();
whatever.Name = message;
whatEvers.Add(whatever);
}
//Sends value to Service
}
}子2通过服务显示用户在子1中所放的内容,并给出用户更改值的可能性。
在这里,我希望能够达到子1的功能。
<h3>Child_2_Component</h3>
<h1>Displays Value from service and lets user put in new value</h1>
<input type="text" />
<button @onclick="@(() => getValue(10))"></button>
@*Here I want to use the funcction getValue(x) in Child_1_Component*@发布于 2020-01-16 15:48:17
定义一个Worker类并将getValue(int值)放入其中。
public class Worker{
public object getValue(int value){
//[...]
return something;
}
}然后有两种可能性:
解决方案1
在两个子项的父项中创建一个Worker实例,并将其放在两个子项中。
//PARENT
<h3>ParentComponent</h3>
<Child_1_Component Worker="@MyWorker"></Child_1_Component>
<Child_2_Component Worker="@MyWorker"></Child_2_Component>
<h3>Child_1_Component</h3>
@code {
private Worker MyWorker{ get; set; }
protected override void OnInitialized()
{
MyWorker = new Worker();
}
}然后是“孩子”,在这两个孩子中,工人是同一个对象:
//CHILD 1
<h1>User puts in something</h1>
<input type="text"/>
<button @onclick="@(() => Worker.getValue(10))"></button>
@code {
[Parameter]
public Worker Worker { get; set; }
}解决方案2:
您可以将getValue(int值)移动到服务中,并在Startup.cs中定义它,然后两个子程序都具有相同的实例。
//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
[...]
services.AddScoped<Worker>();
}然后是孩子,那里的工人在这两个方面都是相同的对象:
//CHILD 1
@inject Worker MyWorker
<h1>User puts in something</h1>
<input type="text"/>
<button @onclick="@(() => MyWorker.getValue(10))"></button>https://stackoverflow.com/questions/59771852
复制相似问题