کامپوننت ها در انگولار
در تاریخ توسط

 برای ارسال مقدار فیلدها در انگولار از والد به فرزند به راحتی در کامپوننت پدر مقدار درون تگ بایند میشود ودر کامپوننت فرزند فیلد به صورت Import@ دریافت میشود.

به عنوان مثال میشه یک آرایه رو از کامپوننت والد پر کرد و فرستاد توی کامننت فرزند و نمایش داد.

ارسال از کامپوننت والد به فرزند

کامپوننت والد

@Component({
  selector: 'app-root',
  template:'<display-error-messages [messages]="errorMessages"></display-error-messages>'
})
export class AppComponent {

  public constructor() {

    this.errorMessages = [
      'Error Message 1',
      'Error Message 2',
      'Error Message 3',
    ];
  }

  public errorMessages: string[];

}
و کامپوننت فرزند
@Component({
  selector: 'display-error-messages',
  template:
    `<div class="alert alert-danger">
	<ul>
	   <li *ngFor="let item of messages">{{ item }}</li>
	</ul>
     </div>`
})
export class DisplayErrorMessagesComponent {

  public constructor() { 
  @Input() public messages: string[]
}
برای ارسال مستقیم رشته آن را داخل  " ' ' " میگذاریم.
ارسال از کامپوننت فرزند به والد
برای اینکه از کامپوننت فرزند بشه یک متغیر و یا چند متغیر (در قالب یک object) را به کامپوننت والد ارسال کرد باید اول emitter تعریف کرد .توسط emit متغیر یا شی به دنیای بیرون معرفی می‌شود.
کامپوننت فرزند
@Component({
  selector: 'app-child',
  template:
    `<h3>I'm Child!</h3>
     <button type="button" (click)="onClick()">Click Me!</button>`,
})
export class ChildComponent {

  public constructor() { }

  @Output() public insideButtonClick = new EventEmitter();

  public onClick(): void {

    this.insideButtonClick.emit(`This Message Sent By Child!`);

  }

}
کامپوننت والد
برای دسترسی به متغیرهای کامپونن child  در والد باید درون تگ معرفی کامپوننت child در والد به صورت یک event نام emitter کامپوننت child نوشته شود و بعد متدی صدا شود که ورودی آن در واقع همان متغیر یا شی ای است که اینجا به صورت event$ به کامپوننت والد جاری رسیده است
@Component({
  selector: 'app-root',
  template:
    `<h1>I'm Parent:</h1>Message: {{ message }}
     <hr>
     <app-child (insideButtonClick)="doSomething($event)"></app-child>
    `,
})
export class AppComponent {

  public constructor() {

    this.message = `First Message!`;

  }

  public message: string;

  public doSomething(sentMessage: string): void {

    this.message = sentMessage;

  }

}

- ارسال تایمر از چایلد به پرنت
کامپوننت چایلد
import { OnInit } from '@angular/core';
import { Output } from '@angular/core';
import { Component } from '@angular/core';
import { EventEmitter } from '@angular/core';
@Component({
  selector: 'child-app',
  templateUrl: './child-app.component.html',
  styleUrls: ['./child-app.component.css']
})
export class ChildAppComponent implements OnInit {

  constructor() { }
  @Output() public myEmitter = new EventEmitter();

  public ngOnInit() {
    setInterval(() => { this.myEmitter.emit(); }, 1000)
  }

}
کامپوننت پرنت
import { Component } from '@angular/core';
import { ChildAppComponent } from './child-app/child-app.component';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  public myparam: number;

  constructor() {
this.counter = 0;
  }
  public counter : number;
  public myMethod():void {
    this.counter++;
  }

}
HTML پرنت
MyParent counter = {{counter}}
نمایش آنلاین : https://stackblitz.com/edit/angular-fzkqbq


کامپوننت‌های هم رده
کامپوننت هایی که والد و فرزند نیستند و اصطلاحا sibling هستند
باید 3 تا html و 3 تا کامپوننت  ایجاد کنیم . کامپوننت اصلی که دو کامپوننت sibling درون اون قرار میگیره و مقداری که از یکی دریافت میشود به دیگری ارسال میشود.

در فایل html کامپوننت home کد زیر را داریم ( خود کامپوننت کد خاصی نداره)
<app-grid-list #appgrid></app-grid-list>
<app-category (myFilter)="appgrid.doFilter($event)"></app-category>

در فایل html کامپوننت category
<li *ngFor="let item of results">
<a (click)="filterMe(item.id)"> {{item.title}} </a>
</li>
و در کامپوننت category
 @Output()  myFilter = new EventEmitter();

  public filterMe(id : number){
    this.filter.FilterColumn = 'myColumn';
    this.myFilter.emit(this.filter)
  }


در  کامپوننت grid-list
  public doFilter(event: any){
    this.filter =  event as PagingFilterModel
    this.getData();
  }

https://medium.com/@pandukamuditha/angular-5-share-data-between-sibling-components-using-eventemitter-8ebb49b64a0a




گروه های پست :
تعداد مشاهده : 412
تعداد پسندها : 1
تعداد نظرات : 0
تعداد پیوست ها : 0

ارسال دیدگاه

ایمیل شما به کاربران نمایش داده نمی شود .

دیدگاه ها

تا کنون نظری داده نشده است .
اولین کسی باشید که دیدگاه خود را ثبت می کند .

loading...

لطفا منتظر بمانید...