Передача значений в список generi c из одного компонента Blazor в другой - PullRequest
0 голосов
/ 14 марта 2020

У меня есть две переменные в списке generi c с именем RowData, и в нем есть 2 переменные с именами RowPosition и RowInfo, которые будут предоставлять данные на стороне сервера.

generi c список будет импортирован в функцию, которая будет строить форму и использовать переданные ей данные.

Мой вопрос: что мне использовать на стороне сервера, чтобы разрешить передачу данных? Например:

RowPosition : RowInfo
1 : blahyes
2 : blahno
3 : blahlol
4 : blahblah

1 Ответ

0 голосов
/ 14 марта 2020

Вы не выложили достаточно кода, чтобы я мог многое добавить к go в качестве предложений, но есть несколько способов взаимодействия компонентов друг с другом.

Вы можете использовать каскадирование Значения и дочерние компоненты смогут ссылаться на родителя следующим образом:

<CascadingValue Value="GalleryManager">
    <ArtistListViewer></ArtistListViewer>
    <ImageListViewer></ImageListViewer>
</CascadingValue>

Здесь мои компоненты ArtistListViewer и ImageListViewer могут ссылаться на менеджер галереи с этим свойством:

[CascadingParameter]
GalleryManager GalleryManager { get; set; }

При слишком частом использовании это может привести к проблемам с производительностью, в зависимости от загруженности вашего сайта.

Я написал сообщение в блоге о другом способе:

Использование интерфейсов для связи между компонентами https://datajugglerblazor.blogspot.com/2020/01/how-to-use-interfaces-to-communicate.html

Если вы отправляете что-нибудь сложное, я предпочитаю метод, описанный выше, где родительский объект - это IBlazorComponentParent, а дочерний объект - это IBlazorComponent.

Nuget Package: DataJuggler.Blazor .Components

Вот как вы можете настроить свойство Parent для ребенка следующим образом:

 <Login OnLogin="LoginComplete" Parent=this></Login>

Parent = это возможно, потому что мой логин компонент - это IBlazorComponent, а моя страница индекса - это IBlazorComponentParent.

Дочерний установщик регистрируется в Parent следующим образом:

public IBlazorComponentParent Parent
{
    get { return parent; }
    set 
    { 
        // set the parent
        parent = value;

        // if the value for HasParent is true
        if (HasParent)
        {
            // Register with the parent to receive messages from the parent
            Parent.Register(this);
        }
    }
}

Событие Register на странице индекса сохраняет дочерний элемент как свойство:

public void Register(IBlazorComponent component)
{
    // If the component object exists
    if (NullHelper.Exists(component, Children))
    {
        // If this is the Login component
        if (component.Name == "Login")
        {
            // Set the Signup control
            this.Login = component as Login;
        }

        // add this child
        Children.Add(component);
    }
}

На данный момент мой компонент Login знает о своем родителе, а родительская страница Index имеет компонент Login в качестве переменной.

Затем вы можете отправить сообщение с чем угодно Вам нравится.

В моем методе входа в систему я отправляю сообщение родителю:

// if the Parent exists
if (HasParent)
{
    // create a message to send
    Message message = new Message();

    // Set the text
    message.Text = loginResponse.Message;

    // Send a message to the parent
    Parent.ReceiveData(message);;
}

Я просто передаю текст выше, но есть также коллекция NamedParameters, которую вы можете передать любой тип данных (объект).

Здесь есть полный рабочий пример и учебное пособие, если вы заинтересованы:

Код https://github.com/DataJuggler/BlazorImageGallery

Видео https://youtu.be/3xKXJQ4qThQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...