Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 无法从单独的组件更新物料表上的数据_Angular_Angular Material - Fatal编程技术网

Angular 无法从单独的组件更新物料表上的数据

Angular 无法从单独的组件更新物料表上的数据,angular,angular-material,Angular,Angular Material,在回答这个问题之前,让我先说明一下,我对Angular是相当陌生的,这是我第一次使用material table。我有一个驻留在一个组件中的材质表。我有一个驻留在另一个组件中的数据获取例程。根据第二个组件中的一些选择,我需要更新材质表中的数据。我不知道我如何才能做到这一点,我所有的实验都失败了。我尝试在这个论坛上寻找解决类似情况的问题,但迄今为止没有成功 我曾尝试直接并通过发射器绑定material表的typescript文件变量,但我看到数据的唯一时间是在第二个表单(计算数据的表单)的ngIn

在回答这个问题之前,让我先说明一下,我对Angular是相当陌生的,这是我第一次使用material table。我有一个驻留在一个组件中的材质表。我有一个驻留在另一个组件中的数据获取例程。根据第二个组件中的一些选择,我需要更新材质表中的数据。我不知道我如何才能做到这一点,我所有的实验都失败了。我尝试在这个论坛上寻找解决类似情况的问题,但迄今为止没有成功

我曾尝试直接并通过发射器绑定material表的typescript文件变量,但我看到数据的唯一时间是在第二个表单(计算数据的表单)的ngInit上。此后,当数据更新时(请参见下面的PerformButtonClickaAction()),我看到数据已正确填充到发射器中,但未显示在表中。我想我需要知道如何在material table组件中触发更新/刷新事件

获取数据的组件:

<div>    
    <div >
        <div >
                <div > 
                    <button (click)="performButtonClickAction('ManualReview')">  </button>
                </div>
                <div >
                    <button (click)="performButtonClickAction('PendingCustomer')"></button>
                </div>
                <div >
                    <button (click)="performButtonClickAction('DecisionRendered')"></button>
                </div>
                <div >
                    <button (click)="performButtonClickAction('RefreshComplete')"></button>
                </div>
                <div >
                    <button (click)="performButtonClickAction('AllMyDeals')"> </button>
                </div>
        </div>

        <div >
            <op-credit-view-body-table [data]="refreshDetails" ></op-credit-view-body-table>
        </div>
    </div>
</div>
我正在寻找的结果是,当第二个表单执行performButtonClickaAction()操作,并且更新refreshDetailRecords[]对象时,我需要以某种方式将该消息传递回material table组件,并让它更新表

目前的路线如下:

数据获取组件的ts文件初始化ngInit()方法中的数据对象refreshDetailRecords[]

数据获取表单在其自己的html中初始化material tables“data”对象,如下所示:

材料数据源数据驻留在材料组件的ts文件中

@Input
中创建一个“getter”,请参见

使用以下命令:-

@Input()
  set data(value:any[]) {
    this.dataSource = value;
    const d = JSON.stingify(this.dataSource);
    this.dataSource = JSON.parse(d);
  }

Eliseo,所以getter/setter可以很好地设置初始数据,但是刷新仍然不会显示在网格中。在debug中,我可以看到刷新数据触发getter()方法,并且可以看到数据源正在更新,但是UI没有反映这些更改。还有什么我需要做的吗?Thank.MumbaiMann,您有一个简单输入的基本父子通信,必须是工作的(使用
console.log(value)
检查输入是否正确。如果有问题,请尝试在表中使用引用变量并使用table.renderRows(),但我认为这必须是必需的。Eliseo,我有一个console.log()在getter中,我还设置了一个断点来更新数据源(this.\u data=value)。我可以验证更新后的数据是否一直到getter,即到material table组件。我只是看不到数据更改时表格网格会自动刷新Seliseo,再次感谢您的帮助。我已使所有数据都正常工作。谢谢您Aarji.Eliseo(上图)提出了一些类似的建议,我最终通过调整刷新部分使其全部正常工作。
ngOnInit() {

    this.dataSource = new CreditViewBodyTableDataSource();
    this.dataSource.data = this.data;
  }
@Input()
  set data(value:any[]) {
    this._data=value; //really if not use "data" you can remove this line
    this.dataSource = new CreditViewBodyTableDataSource();
    this.dataSource.data = value;
  }

  //really if not use "data" you can remove this line
  get data(): any[]{ return this._data; } 
}
@Input()
  set data(value:any[]) {
    this.dataSource = value;
    const d = JSON.stingify(this.dataSource);
    this.dataSource = JSON.parse(d);
  }