Angular 5 Передача данных о событии щелчка от родительского компонента к дочернему компоненту при нажатии кнопки в родительском компоненте - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть некоторая привязка данных в таблице, и по щелчку любого конкретного объекта я хочу показать текущему объекту, по которому щелкнули, более связанные данные с другим компонентом (дочерним компонентом)

, например, данные, которые я беру из этогоссылка: http://jsonplaceholder.typicode.com/users

HTML-код:

<table>
  <thead>
    <th>
      Id
    </th>
    <th>
      name
    </th>
    <th>
      username
    </th>
    <th>
      email
    </th>
    <th>
      street
    </th>
    <th>
      suite
    </th>
    <th>
      zipcode
    </th>
    <th>
      phone
    </th>
    <th>
      website
    </th>
    </thead>
  <tbody>
    <tr *ngFor="let data of httpdata"> 
      <td>{{data.id}}
      </td> 
      <td>{{data.name}}
      </td> 
      <td>{{data.username}}
      </td> 
      <td>{{data.email}}
      </td> 
      <td>{{data.address.street}}
      </td> 
      <td>{{data.address.city}}
      </td> 
      <td>{{data.address.suite}}
      </td> 
      <td>{{data.address.zipcode}}
      </td> 
      <td>{{data.phone}}
      </td> 
      <td>{{data.website}}
      </td> 
      <td>
        <a routerLink="/conflict-details/conflict" (click)="onSelect(data)">Go to 
        </a> 
      </td> 
    </tr>
  </tbody>
</table>

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

просто я хочу отслеживать событие щелчкадля выбранных данных в дочернем компоненте.и таблица отображается в родительском компоненте.

if you can see in this screenshot i can bind the data in same component ,

прикреплена таблица данных, которую я имею.

the table where i have bind the data

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

попробуйте

В обновлении HTML

<a routerLink="/conflict-details/conflict" (click)="onSelect(data)">Go to 
        </a> 

до

<a (click)="onSelect(data)">Go to 
            </a> 

В родительском компоненте

import { Router } from '@angular/router';

export class ParentComponent implements OnInit {
   constructor(private router: Router) {
   }
   onSelect(data) {
      this.router.config.find(r => r.component == ChildComponent).data = data;
      this.router.navigate(["/conflict-details/conflict"]);
   }
}

В дочернем компоненте

import { ActivatedRoute } from '@angular/router';

export class ChildComponent implements OnInit {
   SentItem : any;
   constructor(private router: ActivatedRoute) { }
   ngOnInit() {
      this.router.data.subscribe(r=>this.SentItem =r);
  }
}
0 голосов
/ 10 декабря 2018

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

Изменения:

В родительском компоненте:

HTML-код:

<div>
  <table *ngIf="isVisible === true">
    <tr>
      <th>
        Id
      </th>
      <th>
        name
      </th>
      <th>
        username
      </th>
      <th>
        email
      </th>
    </tr>
    <tr *ngFor="let data of userInformation">
      <td>{{data.id}}
      </td>
      <td>{{data.name}}
      </td>
      <td>{{data.username}}
      </td>
      <td>{{data.email}}
      </td>
      <td>
        <a (click)="onSelect(data)">Go to
        </a>
      </td>
    </tr>
  </table>

  <div *ngIf="isVisible === false">
    <app-test-child [userInfo]="clickedUser" (notify)="backToList($event)"></app-test-child>
  </div>
</div>

Код TS:

Локальные переменные:

userInformation: any;
isVisible : boolean = true;
clickedUser: any;

Две функции в родительском компоненте:

onSelect(data)
{
   this.isVisible = false;
   this.clickedUser = data;
}

backToList(flag) {
  this.isVisible = flag;
  console.log(flag)
}

В дочернем компоненте:

HTML-код:

<table>
  <tr>
    <th>
      Id
    </th>
    <th>
      name
    </th>
    <th>
      username
    </th>
    <th>
      email
    </th>
  </tr>
  <tr>
    <td>{{clickedUser.id}}
    </td>
    <td>{{clickedUser.name}}
    </td>
    <td>{{clickedUser.username}}
    </td>
    <td>{{clickedUser.email}}
    </td>
    <td>
      <a (click)="backToList()">Back
      </a>
    </td>
  </tr>
</table>

TS код:

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


@Input() userInfo: any;
@Output() notify: EventEmitter<any> = new EventEmitter<any>();

clickedUser: any;

constructor() { }

ngOnInit() {
  this.clickedUser = this.userInfo;
}

backToList() {
  var flag = true;
  this.notify.emit(flag);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...