【发布时间】:2020-03-07 09:48:03
【问题描述】:
我是 Angular 的新手,我正在开发一个基本的应用程序。我有几个兄弟组件,其中一个是按钮。通过单击按钮,我必须触发其他组件中的几个功能。 (按钮单击会用数据填充数组,所以当数组发生变化时,可能会触发函数。)如何做到这一点?
我尝试了:@Input-@Output、EventEmmiters、Services、Observables 和 Subscription,@Viewchild 并没有成功...数据在组件之间传输,但没有调用任何函数。那么还有其他想法吗?(或者我尝试过的例子,也许我做错了什么)
服务:
import { Injectable, Input } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class VisualService {
public dataArray = [];
private dataSource = new BehaviorSubject(this.dataArray);
currentArray = this.dataSource.asObservable();
constructor() { }
updateData(array) {
this.dataSource.next(array);
this.dataArray = array;
console.log(this.dataArray);
}
}
我想触发函数的组件:
import { Component, OnInit, Input, ViewChild } from '@angular/core';
import { DialogComponent } from '../dialog/dialog.component';
import { MatDialog } from '@angular/material/dialog';
import { MatTable } from '@angular/material/table';
import { VisualService } from '../services/visual.service';
@Component({
selector: 'app-table',
templateUrl: './table.component.html',
styleUrls: ['./table.component.css']
})
export class TableComponent implements OnInit {
@ViewChild('dataTable', { read: MatTable, static: false }) dataTable: any;
@Input() public formDataArray;
public dataArray = [];
displayedColumns: string[] = ['position', 'name', 'surname', 'age', 'action'];
constructor(public dialog: MatDialog, private _visualService: VisualService) { }
openDialog(customer) {
this.dialog.open(DialogComponent);
}
ngOnInit() {
this._visualService.currentArray
.subscribe(arrayData => {
this.dataArray=arrayData
console.log(this.dataArray)
//this.dataTable.renderRows(); -- this is the line that i want to use to redraw a Angular Mat table...but it displays that the table is undefined...//
});
}
【问题讨论】:
-
不要告诉我们您尝试了什么,显示您尝试过的代码。谢谢。
标签: angular typescript