angular - Angular 8 树:从 JSON 文件加载数据
问题描述
作为一个 Angular/Typescript/OOP 初学者而不是专家,我有几个 JSON 文件,每个文件代表手册的目录。在“文档”组件中,我想为用户选择的文档加载目录。
表示 JSON 结构的接口/类,...
export interface link {
name:string;
url:string;
hasChildren:boolean;
link?:link[];
}
... 适用于 mat-nested-tree,使用静态数据进行测试,如此处的示例所示(请参阅“带有嵌套节点的树”)。
export class TreeNestedOverviewExample {
treeControl = new NestedTreeControl<link>(node => node.link); // very simple structure links as children of link
dataSource = new MatTreeNestedDataSource<link>();
constructor() {
this.dataSource.data = TREE_DATA; // works when TREE_DATA is defined as a const
}
}
这是我的 ngOnChanges 片段:
ngOnChanges(changes) {
if (changes.indexfile) {
console.log('infi: '+this.indexfile); // shows expected filename
this._userdocService.getToc(this.indexfile)
.subscribe(data => {
this.dataSource.data.push(data as link);
console.log('ngOnChanges: '+JSON.stringify(data)); //shows expected JSON
});
}
我能够从 ngOnChanges() 中的服务(但不能在 ngOnInit() 中)接收 JSON 数据作为订阅的 Observable。它在控制台中正确显示数据。
但是,我无法将收到的数据分配给 mat 树。
我想用几句话知道您作为专家如何对此进行建模,我错过了什么?
解决方案
问题是 dataSource 需要内存中的新对象来呈现。解决方法是在内存中设置一个新数组
this.dataSource.data.push(data as link);
this.dataSource.data = [...this.dataSource.data];
推荐阅读
- ruby-on-rails-5 - 为什么 Payments.valid.first.source 为 Spree::Order 返回 nil 的某些原因?
- c# - Entity Framework Core - 线程安全和锁上下文锁定{}。我的选择合适吗?
- hadoop - TEZ 参数等效于“mapreduce.map.failures.maxpercent”
- java - Android - 自定义 Toast 类中的程序 ImageView 约束
- python-3.x - 如何从具有相同类属性的表中抓取文本?
- javascript - 如何从特定频道获取附件 url?
- c - 具有 o(1) 的数组
- vba - 尝试计算平均值的视觉基本错误
- java - 如何在java中从用户获取多个值输入(具有不同类型并用逗号分隔)
- powerbi - 保护 PowerBI 报告的基本设置是什么?