简体   繁体   English

在 Ag-Grid Angular 中使用 buttonRenderer 传递数据

[英]Pass data with buttonRenderer in Ag-Grid Angular

im trying to pass data between 2 unrelated components by clicking on the cell in ag-Grid and the data will be passed to my form component.我试图通过单击 ag-Grid 中的单元格在 2 个不相关的组件之间传递数据,数据将传递到我的表单组件。 I used the buttonRenderer function to retrieve the data of the row from the ag-Grid but i don't know how to pass it now to my second component.我使用 buttonRenderer function 从 ag-Grid 检索行的数据,但我不知道现在如何将它传递给我的第二个组件。 here is my 2 interfaces:这是我的2个界面: 农业网格

形式

here is my code too: Ag-Grid.ts这也是我的代码: Ag-Grid.ts

 import { Component, OnInit,Output, EventEmitter,Input  } from '@angular/core';
    import { HttpClient } from '@angular/common/http';
    import { Grid, GridApi } from 'ag-grid-community';
    import { AgGridAngular } from 'ag-grid-angular';
    import { DealsService } from '../services/deals.service';
    import "ag-grid-community/dist/styles/ag-grid.css";
    import "ag-grid-community/dist/styles/ag-theme-balham.css";
    import { RouterLinkRendererComponent } from '../router-link-renderer/router-link-renderer.component';
    import {RouterModule, Routes, Router} from '@angular/router';
    import { ButtonRendererComponent } from '../renderer/button-renderer/button-renderer.component';
    
    @Component({
      selector: 'app-deals',
      templateUrl: './deals.component.html',
      styleUrls: ['./deals.component.scss']
    })
    export class DealsComponent implements OnInit {
      
      private gridApi;
      gridOptions = {
        rowHeight :90,
        headerHeight:60,
        
        defaultColDef: {
          sortable: true
      },
      }
      columnDefs = [
        {
          headerName: 'Button Col 1',
          cellRenderer: 'buttonRenderer',
          cellRendererParams: {
            onClick: this.onBtnClick1.bind(this),
            label: 'Deal details',
            }
        },
rowData : any;
frameworkComponents: any;
rowDataClicked1 = {};
rowDataClicked2 = {};
constructor(private service:DealsService) {
  this.frameworkComponents = {
    buttonRenderer : ButtonRendererComponent,
  }
}
onGridReady(params) {
  this.gridApi = params.api; 
}

getDropDownlist(){
  this.service.getDealsList().subscribe(data => this.rowData = data);  
  }
  
onBtnClick1(e) {
  this.rowDataClicked1 = e.rowData;

}
  
ngOnInit() {
this.service.getDealsList().subscribe(data => {
  this.rowData = data;
}); 
}

Ag-Grid.html: Ag-Grid.html:

 <h4>Row data from button 1: </h4>
 <pre style="float: right;">{{rowDataClicked1 | json}}</pre>
<!-- <button (click)="newMessage()" class="button">new message</button> -->
<ag-grid-angular ng-grid="gridOptions"
style="    min-width: 75%; max-width: 85%;
height: 1015px; margin-left: auto; margin-right: 40px; margin-top: 60px;"
class="ag-theme-alpine"
[rowData]="rowData"
[columnDefs]="columnDefs"
[gridOptions]="gridOptions"
[animateRows]="true"
[paginationPageSize]="10"
[pagination]="true"
[frameworkComponents]="frameworkComponents"

(selectedRows)= "makeCellClicked($event)"
(gridReady)="onGridReady($event)"

 >
</ag-grid-angular>

ButtonRendererComponent.ts: ButtonRendererComponent.ts:

import { Component } from '@angular/core';
import { ICellRendererAngularComp } from 'ag-grid-angular';
//import { ICellRendererParams, IAfterGuiAttachedParams } from 'ag-grid-angular';

@Component({
  selector: 'app-button-renderer',
  template: `
    <button type="button" (click)="onClick($event)">{{label}}</button>
    `
})

export class ButtonRendererComponent implements ICellRendererAngularComp {

  params;
  label: string;

  agInit(params): void {
    this.params = params;
    this.label = this.params.label || null;
  }

  refresh(params?: any): boolean {
    return true;
  }

  onClick($event) {
    if (this.params.onClick instanceof Function) {
      // put anything into params u want pass into parents component
      const params = {
        event: $event,
        rowData: this.params.node.data
        // ...something
      }
      this.params.onClick(params);

    }
  }
}

and finally form.ts:最后是form.ts:

import { Component, OnInit} from '@angular/core';
@Component({
selector: 'app-repo',
templateUrl: './repo.component.html',
styleUrls: ['./repo.component.scss']
})
export class RepoComponent implements OnInit {
constructor() {}
ngOnInit(): void {
}
}

form.html:表格.html:

<div style="display:flex;" class="panel panel-default">
    <div style="width: 500px; height: 500px;"></div>
 <form   autocomplete="off" >
    <div class="form-group">
        <label>Folder</label>
        <input required type="text" id="folder"  placeholder="Enter a 
  folder" name="Folder" style="width: 400px;">
      </div>
    </form>

I'm blocked and I really appreciate your help guys.我被阻止了,非常感谢你们的帮助。 thank you!谢谢你!

app-deals component:应用交易组件:

add app-repo to html and pass the value from ButtonRenderer to the 'data' input:将 app-repo 添加到 html 并将值从 ButtonRenderer 传递到“数据”输入:

HTML: HTML:

<app-repo [data]="rowDataClicked1"></app-repo>

app-repo component:应用程序回购组件:

add an Input to get the data from ButtonRenderer.添加一个Input从 ButtonRenderer 获取数据。

create your form using angular Reactive Forms .使用 angular Reactive Forms创建表单。

patch data recieved from ButtonRenderer to the form.从 ButtonRenderer 接收到的补丁数据到表单。

@Input() data: any;

form: FormGroup;

constructor(private fb: FormBuilder) {
    this.form = this.fb.group({
        folder: '',
        type: ''
    });
}

ngOnChanges(changes) {
    if (changes.data) thos.form.patchValue(this.data);
}

HTML: HTML:

<form [formGroup]="formData">
    <div>
        <input placeholder="Folder" formControlName="folder">
    </div>
    <div>
        <input placeholder="Type" formControlName="type">
    </div>
</form>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM