社区首页 >问答首页 >角7 SlickGrid详细信息-视图:不能将EventEmitter从详细视图(子)组件传递给SlickGrid (父组件)

角7 SlickGrid详细信息-视图:不能将EventEmitter从详细视图(子)组件传递给SlickGrid (父组件)
EN

Stack Overflow用户
提问于 2020-01-09 02:25:37
回答 1查看 1.4K关注 0票数 0

我使用角SlickGrid作为父组件和插件细节-视图作为子组件。详细-视图组件,我正在使用几个按钮来执行特定的任务。其中之一是按钮删除。问题是当单击按钮时,它会触发组件服务通过其ID从网格中删除选定的行。后端工作非常好。但!在前端,该行仍然可见,除非我手动重新加载页面。我需要从父组件中删除的行按一下。我试着使用EventEmitters,但是SlickGrid不承认这个功能。如果一切都在一个组件中,我可以轻松地使用:this.angularGrid.gridService.deleteItemById(del_id);,但是由于rowDetailViewthis.gridOptions中传递详细视图数据,所以没有像<app-row-detail-view></app-row-detail-view>那样的组件模板标记。

My Detail组件(子)

代码语言:javascript
代码运行次数:0
复制
  @Input() del_id: string;
  @Output() onDelete = new EventEmitter<string>();

  model: {
    id: string;
    domains: string;
    example_site: string;
    status: string;
    created: string;
    image: string;
  };

  deleteRecipe() {
    if (confirm('Are You sure?')) {
      console.log("EVENT 1");
      this.del_id = this.model.id;
      this.onDelete.emit(this.del_id);
      console.log(this.del_id);
      return this.recipeService.removeRecipe(this.del_id)
      .subscribe(u => {
        return u;
      });
    }
  }

我的详细信息-查看HTML(子)

代码语言:javascript
代码运行次数:0
复制
<button (click)="deleteRecipe()">DELETE</button>

我的父组件

代码语言:javascript
代码运行次数:0
复制
<angular-slickgrid
      gridId="grid11"
      [columnDefinitions]="columnDefinitions"
      [gridOptions]="gridOptions"
      [gridWidth]=1500
      [dataset]="dataset"
      (onAngularGridCreated)="angularGridReady($event)"
      (onDelete)="onDeleted($event)"
      >
</angular-slickgrid>

我不能在这里使用像[del_id]="del_id"这样的东西,因为控制台有很大的错误。

我的父组件.ts

代码语言:javascript
代码运行次数:0
复制
  onDeleted(del_id: string) {
    console.log("EVENT 2");
    console.log(del_id);
    this.angularGrid.gridService.deleteItemById(del_id);
  }

  this.gridOptions = {
      enableAsyncPostRender: true,
      enableFiltering: true,
      enableAutoResize: true,
      enableCellNavigation: true,
      enableGrouping: false,
      enableRowDetailView: true,
      enableColumnReorder: false,
      rowSelectionOptions: {
        selectActiveRow: true
      },
      rowDetailView: {
        process: (item: any) => this.simulateServerAsyncCall(item),
        viewComponent: RecipeDetailsComponent,
        loadOnce: true,
        singleRowExpand: true,
        useRowClick: true,
        panelRows: this.detailViewRowCount
      }
    };

  simulateServerAsyncCall(item: any) {
    return new Promise((resolve) => {
      const itemDetail = item;
      resolve(itemDetail);
    });
  }

我试过很多关于EventEmitters的文章,比如:https://github.com/6pac/SlickGrid/blob/master/plugins/slick.rowdetailview.js#L10https://www.infragistics.com/community/blogs/b/infragistics/posts/understanding-output-and-eventemitter-in-angularhttps://github.com/ghiscoding/Angular-Slickgrid/blob/master/src/app/modules/angular-slickgrid/models/rowDetailView.interface.ts

任何帮助都将不胜感激!谢谢各位同事们!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-20 09:37:05

请注意,我是角斯利克格栅的作者。

我同意在以前的版本中这样做是很困难的,因此为了处理这个问题,我向SlickGrid、DataView引用以及行详细扩展的父组件实例添加了新的引用,因此您现在可以将所有这些新引用都访问到您的子组件中。为了利用这些新的变化,请更新到最新的角-Slickgrid 2.16.x版

现在,使用这些引用,您可以利用它们并将Row Detail子组件更改为以下内容

您可以在更新的行细节示例中看到您的问题的现场演示(如何从子组件中删除一行),我还更新了行详细信息维基

子组件-行详细视图

代码语言:javascript
代码运行次数:0
复制
<div class="container-fluid">
  <h3>{{model?.title}}</h3>

    <button class="btn btn-primary btn-danger btn-sm" (click)="deleteRow(model)" data-test="delete-btn">
      Delete Row
    </button>
    <button class="btn btn-default btn-sm" (click)="callParentMethod(model)" data-test="parent-btn">
      Call Parent Method
    </button>
</div>

子组件-行详细组件

代码语言:javascript
代码运行次数:0
复制
import { Component } from '@angular/core';
import { GridRowDetailComponent } from './grid-rowdetail.component';

@Component({
  templateUrl: './rowdetail-view.component.html'
})
export class RowDetailViewComponent {
  model: {
    duration: Date;
    percentComplete: number;
    reporter: string;
    start: Date;
    finish: Date;
    effortDriven: boolean;
    assignee: string;
    title: string;
  };

  // you also have access to the following objects (it must match the exact property names shown below)
  addon: any; // row detail addon instance
  grid: any;
  dataView: any;

  // you can also optionally use the Parent Component reference
  // NOTE that you MUST provide it through the "parent" property in your "rowDetail" grid options
  parent: GridRowDetailComponent;

  constructor() { }

  alertAssignee(name: string) {
    if (typeof name === 'string') {
      alert(`Assignee on this task is: ${name.toUpperCase()}`);
    } else {
      alert('No one is assigned to this task.');
    }
  }

  deleteRow(model) {
    if (confirm(`Are you sure that you want to delete ${model.title}?`)) {
      // you first need to collapse all rows (via the 3rd party addon instance)
      this.addon.collapseAll();

      // then you can delete the item from the dataView
      this.dataView.deleteItem(model.id);

      this.parent.showFlashMessage(`Deleted row with ${model.title}`, 'danger');
    }
  }

  callParentMethod(model) {
    this.parent.showFlashMessage(`We just called Parent Method from the Row Detail Child Component on ${model.title}`);
  }
}

父组件-网格

代码语言:javascript
代码运行次数:0
复制
<div class="container-fluid">
  <h2>{{title}}</h2>
  <div class="subtitle" [innerHTML]="subTitle"></div>

  <div class="alert alert-{{flashAlertType}} col-sm-6" *ngIf="message" data-test="flash-msg">{{message}}</div>

  <hr />

  <angular-slickgrid gridId="grid21" [columnDefinitions]="columnDefinitions" [gridOptions]="gridOptions"
    [dataset]="dataset" (onAngularGridCreated)="angularGridReady($event)">
  </angular-slickgrid>
</div>

父组件视图

代码语言:javascript
代码运行次数:0
复制
import { Component, OnInit } from '@angular/core';
import {
  AngularGridInstance,
  Column,
  ExtensionName,
  FieldType,
  Filters,
  Formatters,
  GridOption
} from './../modules/angular-slickgrid';
import { RowDetailViewComponent } from './rowdetail-view.component';
import { RowDetailPreloadComponent } from './rowdetail-preload.component';


@Component({
  templateUrl: './grid-rowdetail.component.html'
})
export class GridRowDetailComponent implements OnInit {
  angularGrid: AngularGridInstance;
  columnDefinitions: Column[];
  gridOptions: GridOption;
  dataset: any[];
  detailViewRowCount = 9;
  message: string;
  flashAlertType = 'info';

  constructor() { }

  angularGridReady(angularGrid: AngularGridInstance) {
    this.angularGrid = angularGrid;
  }

  get rowDetailInstance(): any {
    return this.angularGrid && this.angularGrid.extensionService.getSlickgridAddonInstance(ExtensionName.rowDetailView) || {};
  }

  ngOnInit(): void {
    this.defineGrid();
  }

  /* Define grid Options and Columns */
  defineGrid() {
    this.columnDefinitions = [ /** ... */ ];

    this.gridOptions = {
      autoResize: {
        containerId: 'demo-container',
        sidePadding: 15
      },
      enableFiltering: true,
      enableRowDetailView: true,
      rowSelectionOptions: {
        selectActiveRow: true
      },
      rowDetailView: {
        // We can load the "process" asynchronously in 2 different ways (httpClient OR even Promise)
        process: (item) => this.simulateServerAsyncCall(item),
        // process: (item) => this.http.get(`api/item/${item.id}`),

        // load only once and reuse the same item detail without calling process method
        loadOnce: true,

        // limit expanded row to only 1 at a time
        singleRowExpand: false,

        // false by default, clicking anywhere on the row will open the detail view
        // when set to false, only the "+" icon would open the row detail
        // if you use editor or cell navigation you would want this flag set to false (default)
        useRowClick: true,

        // how many grid rows do we want to use for the row detail panel (this is only set once and will be used for all row detail)
        // also note that the detail view adds an extra 1 row for padding purposes
        // so if you choose 4 panelRows, the display will in fact use 5 rows
        panelRows: this.detailViewRowCount,

        // you can override the logic for showing (or not) the expand icon
        // for example, display the expand icon only on every 2nd row
        // expandableOverride: (row: number, dataContext: any, grid: any) => (dataContext.id % 2 === 1),

        // Preload View Component
        preloadComponent: RowDetailPreloadComponent,

        // View Component to load when row detail data is ready
        viewComponent: RowDetailViewComponent,

        // Optionally pass your Parent Component reference to your Child Component (row detail component)
        parent: this
      }
    };

    this.getData();
  }


  closeAllRowDetail() {
    if (this.angularGrid && this.angularGrid.extensionService) {
      this.rowDetailInstance.collapseAll();
    }
  }

  showFlashMessage(message: string, alertType = 'info') {
    this.message = message;
    this.flashAlertType = alertType;
  }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59661868

复制
相关文章
NoSQL和数据可扩展性
介绍 本文提供了一个易于理解和有用的一组有关当前可用NoSQL数据库的信息。 可扩展数据架构 可扩展数据架构已发展用于提高整体系统效率并降低运营成本。 具体的NoSQL数据库可能具有不同的拓扑要求,但
用户1263954
2018/01/30
12.3K0
NoSQL和数据可扩展性
可扩展模式
软件系统与硬件和建筑系统最大的区别在于软件是可扩展的。一个硬件生产出来后一般都不会进行改变了,而且都会一直使用,知道不能使用为止;一栋房子建好了是不会去改变其整体架构,顶多也是进行装修,但是整体架构是不会变的。
田维常
2019/07/30
5850
可扩展模式
MATLAB截断数组
s1 = randi([400, 3000],189,1);s1 = sort(s1);s1(1,1) = 400;s1(189,1) = 3000;s1 = s1/1000;lambda = s1;%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到10
狼啸风云
2019/04/09
1.6K0
MATLAB-数组
之前,我们讨论了很多关于MATLAB向量和矩阵的知识,在本章中,我们将讨论多维数组。在MATLAB中所有的数据类型的变量是多维数组,向量是一个一维阵列,矩阵是一个二维数组。
用户9925864
2022/07/27
1.1K0
数组的扩展
数组的扩展 数组的扩展.png 扩展运算符 扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 由于扩展运算符可以展开数组,所以不再需要apply方法,将数组转为函数的参数了 数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组 扩展运算符提供了数组合并的新写法。 扩展运算符可以与解构赋值结合起来,用于生成数组 扩展运算符还可以将字符串转为真正的数组。 任何 Iterator 接口的对象(参阅 Iter
李才哥
2021/02/23
5390
数组的扩展
数组的扩展
扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
小小杰啊
2022/12/21
5730
matlab 循环矩阵_matlab循环输出数组
clc;clearall;closeall;t0=[11];a=[12;34]t=t0;t(1,:)=t0’\an=10;fori=2:nt(i,:)=t(i-1,:)’\a;endt
全栈程序员站长
2022/11/08
3.3K0
Matlab的数组索引
在 MATLAB中,根据元素在数组中的位置(索引)访问数组元素的方法主要有三种:按位置索引、线性索引和逻辑索引。
用户9925864
2022/07/27
1.7K0
【可扩展性】谷歌可扩展和弹性应用的模式
本文档介绍了一些用于创建具有弹性和可扩展性的应用程序的模式和实践,这是许多现代架构练习的两个基本目标。设计良好的应用程序会随着需求的增加和减少而上下扩展,并且具有足够的弹性以承受服务中断。构建和运行满足这些要求的应用程序需要仔细规划和设计。
架构师研究会
2022/09/26
1.8K0
matlab 单元数组和元胞数组
本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面消息对国内各个高校和业界影响很大。但是我们作为技术人员,更是要奋发努力,拼搏上进,学好技术,才能师夷长技以制夷,为中华之崛起而读书!
演化计算与人工智能
2020/08/14
1.8K0
可动态扩展的数据库模型设计
在通常的数据库设计中,我们定义了每个实体有多少个属性,每个属性的数据类型是什么,有多长,是否允许为空,有什么约束条件等,这些定义是完全静态的,系统创建时就全部定义好,不能动态修改。但是对于实体的属性变化很快,或者实体和属性由用户在系统中自行定义的情况下,那么就需要一个可以动态扩展的数据库模型,以保存各种动态产生的数据。
深蓝studyzy
2022/06/16
1.4K0
可动态扩展的数据库模型设计
数据库PostrageSQL-可扩展性
PostgreSQL的JIT实现可以内联C以及internal类型的函数体,还有基于这类函数的操作符。
cwl_java
2021/01/13
1.2K0
Matlab赋值_matlab二维数组赋值
y=[106。42 108。26 109。58 109。5 110 109。93 110。49 110。
全栈程序员站长
2022/11/10
2.2K0
可扩展架构取舍
在做出取舍之前有一点很重要:列出那些不能舍弃的需求——我们的设计的哪些方面对实现可扩展是至关重要的、不能改变的。比如,被渲染页面中的实体个数或者函数间接调用的最大深度就不能改变。虽然不可变的内容不会太多,但是它们确实存在。最好的办法是缩小这些内容的作用范围,减少它们的数量。如果有太多严格的设计原则不能被打破或改变以迎合需求,就不能更好地适应不断变化的可扩展性影响因素。
博文视点Broadview
2020/06/11
4290
XML——可扩展标记语言
(1)可扩展性方面:XML允许用户根据需要自行定义新的标识及属性名,以便更好地从语义上修饰数据。
From Zero
2021/12/07
7270
可扩展机器学习——概述
注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图也是引用的原来的教程,若内容上有任何错误,希望与我联系,若内容有侵权,同样也希望告知,我会尽快删除。 可扩展机器学习系列主要包括以下几个部分: 概述 Spark分布式处理 线性回归(linear Regression) 梯度下降(Gradient Descent) 分类——点击率预测(Click-through Rate Prediction) 神经
felixzhao
2018/03/20
1.1K0
可扩展机器学习——概述
可扩展机器学习——概述
注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图也是引用的原来的教程,若内容上有任何错误,希望与我联系,若内容有侵权,同样也希望告知,我会尽快删除。
felixzhao
2019/02/13
6150
用 R &Python 在云端运行可扩展数据科学
前言 如今,数据科学变得越来越复杂。这种复杂性由下面三个因素导致: 增长的数据生产能力 —— 环视四周,数的出多少个能产生数据的设备呢?如果你用笔记本电脑来浏览本文的话算一个,如果身边有智能手机(以及安装的APPs)的话再加一个,如果带了健身手环的话还要加一个,驾驶的汽车(有些情况下)也算一个 —— 它们都在持续不断地生产数据。现在设想今后几 年内的情景,你所使用的冰箱、家里的温度调节器、穿戴的衣物、兜内的钢笔以及喝水的水壶都会嵌入传感器,不断向数据科学家(和数据库)传输数据用来分析。 低廉的数据存储成本
用户1737318
2018/06/06
9670
matlab运行结果图片如何保存_应对数据丢失最简单的方法
% saveas(figure_handle,filename,fileformat)
全栈程序员站长
2022/09/30
1.8K0
Matlab的多维数组操作
MATLAB中的多维数组是指具有两个以上维度的数组。在矩阵中,两个维度由行和列表示。
用户9925864
2022/07/27
1.5K0
Matlab的多维数组操作

相似问题

如何在Matlab中创建可扩展数组?

20

MATLAB中可扩展的数据结构

55

单元数组扩展Matlab

11

重复可扩展图像网格丢失功能

10

MATLAB -关闭FOR循环时数据丢失

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档