Angular 如何更新/替换角材质树中的数据

Angular 如何更新/替换角材质树中的数据,angular,angular-material,Angular,Angular Material,我试图在材质平面树组件中实现搜索功能(过滤),但在更新数据源时什么也没发生。我觉得我已经尝试了所有不同的方法,但都没能成功。我所要做的就是替换数据并重新命名树。我做错了什么 我尝试过不同的解决方案,但其中许多似乎已经过时,例如: this.dataSource.data = null; this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); this.dataSource

我试图在材质平面树组件中实现搜索功能(过滤),但在更新数据源时什么也没发生。我觉得我已经尝试了所有不同的方法,但都没能成功。我所要做的就是替换数据并重新命名树。我做错了什么

我尝试过不同的解决方案,但其中许多似乎已经过时,例如:

this.dataSource.data = null;
    this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
    this.dataSource.data = [];
当尝试展平空对象时,会出现错误

interface FlatNode {
  expandable: boolean;
  name: string;
  level: number;
}

@Component({
  selector: 'app-category-list',
  templateUrl: './category-list.component.html',
  styleUrls: ['./category-list.component.scss']
})
export class CategoryListComponent {
  dataChange = new BehaviorSubject<Category[]>([]);
  private _transformer = (node: Category, level: number) => {
    return {
      expandable: !!node.children && node.children.length > 0,
      name: node.name,
      level: level,
    };
  }

  treeControl = new FlatTreeControl<FlatNode>(
      node => node.level, node => node.expandable);

  treeFlattener = new MatTreeFlattener(
      this._transformer, node => node.level, node => node.expandable, node => node.children);

  dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);

  constructor(private categoryListService: CategoryListService) {this.dataSource.data = this.categoryListService.getTopCategories();}

  hasChild = (_: number, node: FlatNode) => node.expandable;

  ngOnInit() {
    this.dataChange.subscribe(data => {
      this.dataSource.data = data;
    });
  }

  }

  searchCategory(list: Category[]) {
    this.dataChange.next(list);
  }
}
接口节点{
可扩展:布尔型;
名称:字符串;
级别:数字;
}
@组成部分({
选择器:“应用程序类别列表”,
templateUrl:'./category list.component.html',
样式URL:['./类别列表.component.scss']
})
导出类CategoryListComponent{
dataChange=新的行为主体([]);
专用变压器=(节点:类别、级别:编号)=>{
返回{
可扩展:!!node.children&&node.children.length>0,
name:node.name,
级别:级别,,
};
}
treeControl=新FlatTreeControl(
node=>node.level,node=>node.expandable);
treeFlattener=新MattreeFlatteren(
这是。_transformer,node=>node.level,node=>node.expandable,node=>node.children);
dataSource=新MatTreeFlatDataSource(this.treeControl,this.treeFlattener);
构造函数(私有categoryListService:categoryListService){this.dataSource.data=this.categoryListService.getTopCategories();}
hasChild=(quo:number,node:FlatNode)=>node.expandable;
恩戈尼尼特(){
this.dataChange.subscribe(数据=>{
this.dataSource.data=数据;
});
}
}
searchCategory(列表:类别[]){
this.dataChange.next(列表);
}
}

我希望数据源更新并重新呈现材质树。

您如何在模板中使用它?当模型更改时,数据绑定应重新提交视图。是否列出了具有名称和子对象的对象数组?请使用console.log(列表)签入函数searchCategory。我在书中留下了一个愚蠢的例子。(如果您输入“F”只显示“水果”,如果输入“V”只显示“蔬菜”,谢谢您的输入,我发现我在应用程序组件中使用了我的组件,而不是在另一个组件中使用,该组件不知何故没有触发重新加载。现在它正常工作了!