Angular5, Взаимодействие между компонентами

В настоящее время прохожу курс Angular5 и после некоторого исследования этой темы я до сих пор не понимаю полностью следующее:

Код:

App.component.html:

      <app-server-element 
      *ngFor="let serverElement of serverElements"
      [element]="serverElement"
       ></app-server-element>

App.component.ts:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  serverElements = [{type: 'server', name:'Testserver',content:'just a test!'},
                    {type: 'server', name:'Testserver',content:'just a test!'}
];  
   }

сервер-элемент.component.html:

  <p>
    <strong *ngIf="element.type === 'server'" style="color: red">
{{ element.content }}</strong>
    <em *ngIf="element.type === 'blueprint'">{{ element.content }}</em>
  </p>

сервер-элемент.component.ts:

import { Component, OnInit,Input } from '@angular/core';

@Component({
  selector: 'app-server-element',
  templateUrl: './server-element.component.html',
  styleUrls: ['./server-element.component.css']
})
export class ServerElementComponent implements OnInit {
 @Input() element: {type:string, name:string, content:string};
}

Вопрос:

Я немного смущен тем, что делает эта часть:

  *ngFor="let serverElement of serverElements"
  [element]="serverElement"

В моем текущем понимании это цикл for, который перебирает все элементы serverElementsArray. Но тогда что конкретно делает [element]="serverElement"?


person Willem van der Veen    schedule 12.11.2017    source источник


Ответы (2)


Вы совершенно правы насчет цикла по всем элементам serverElementsArray.

Используя [element]=..., вы привязываете ввод компонента. Читайте дальше... :-)

Обратите внимание, где он зациклен — компонент app-server-element. Я предполагаю, что этот компонент отвечает за печать сведений о нашем сервере.

Но вы должны каким-то образом предоставить ему сервер, который он должен распечатать. И вот где [element]=... вступает в игру

Обратите внимание на @Input() element часть ServerElementComponent. Это определяет, что компонент принимает некоторое входное значение.

Таким образом, используя [element]=..., вы привязываете один serverElement к @Input, называемому element в ServerElementComponent. Для каждого элемента в цикле будет несколько ServerElementComponent.

person Martin Nuc    schedule 12.11.2017

Используя метод @Input, вы можете общаться только между родительским и дочерним компонентами. И станет трудно управлять иерархией родительско-дочерних компонентов. Итак, рассмотрим эмиттер событий Rxjs, который позволяет взаимодействовать с родственными компонентами, также используя общий сервис, который ссылается на здесь

person Dipten    schedule 26.01.2018