Как вызвать один и тот же компонент несколько раз с разными входными данными и отобразить его на одной странице

#angular #angular6 #components #multiple-instances

#angular #angular6 #Компоненты #несколько экземпляров

Вопрос:

У меня есть родительский компонент с несколькими сценариями. У меня есть дочерний компонент, который будет отображать подробную информацию о скрипте. Я каждый раз передаю имя скрипта в качестве входных данных моему дочернему компоненту. Я получаю подробную информацию с сервера и отображаю ее в child.html страница.

Здесь, когда я каждый раз нажимаю на скрипт, старые детали скрипта заменяются новыми деталями скрипта (щелкнул скрипт). Я не хочу, чтобы мои старые данные скрипта исчезали, когда я нажимаю на новый

Я новичок в angular. Может ли кто-нибудь помочь мне с этим. По сути, я хочу загружать один и тот же компонент несколько раз для разных входов и отображать все вместе.Ниже приведен лишь пример кода того, чего я пытаюсь достичь..

parent.html

 parent.html

<li> script1 <li>
<li> script2 <li>
<input type=button (onclick)=getDetails(script)>
<app-script-details 
    *ngIf="showChild"
    [job]="currentScript">
</app-Script-details>     
  

— Вызов дочернего компонента с выбранным сценарием в качестве входных данных

parent component.ts

 getDetails(script){
   this.showChild=true
   this.currentScript=script  // Clicked script
}
  

Child.html

 <h1>Script A - Details </h1>
  

дочерний component.html

  @Input() script

// Here I make a call to the server and get the details from server and display in child.html
  

Здесь, если я сначала нажму Script A, он покажет детали Script A, а затем, если я нажму script B, детали Script A будут заменены деталями Script B.

Я хочу показать обе детали одновременно.. Скрипт A и во время его загрузки (ожидание ответа от сервера), если я нажму Скрипт B, он должен начать загрузку, и обе детали сценария должны появляться всякий раз, когда они доступны.

Комментарии:

1. предоставьте минимальный код для правильного понимания ваших требований, чтобы это помогло нам решить вашу проблему.

2. @ganesh045: Добавлен пример базового кода того, что я пытаюсь сделать.. Любая помощь высоко ценится. Спасибо..

Ответ №1:

Вы должны использовать ngFor для перебора массива выбранных сценариев и отображения дочернего компонента.

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

 clickedScripts = [
    {id: 1, name: 'script A'},
    {id: 2, name: 'script B'},
    {id: 3, name: 'script C'},
]
  

Продолжайте помещать любой новый объект скрипта с щелчком мыши в этот массив.
Затем в вашем шаблоне используйте дочерний компонент для их отображения.

 <div>
    <child-component *ngFor="let script of clickedScripts" [scriptName]="script.name">
</div>
  

Также, пожалуйста, ознакомьтесь с trackBy функцией в документации angular. Это поможет повысить производительность и не обновлять весь отображаемый шаблон каждый раз, когда вы добавляете новый элемент в массив.

Комментарии:

1. Добавлен пример кода того, что я пытаюсь сделать .. Пожалуйста, посмотрите и посоветуйте. Спасибо..

2. Реализовали рабочий пример @ stackblitz.com/edit/ngfor-parent-child . Примечание: Избегайте вызовов служб из дочерних компонентов. Взгляните на концепцию Presentation vs Container components о разработке пользовательского интерфейса с помощью Angular, React, Vue и т.д.