angular / angular/components

Nested tree does not correctly update

オープン
#13,028 コメント 6 件 リアクション 5 件 担当者 0 名 GitHub で見る
area: cdk/tree G P2
主要言語
TypeScript
スター
25k
フォーク
6.8k
平均マージ
1日 8時間
マージ済み PR(30日)
91

説明

#### Bug, feature request, or proposal:
Bug

#### What is the expected behavior?
Adding a node to the tree and firing a change event should update the tree

#### What is the current behavior?
The tree does not update

#### What are the steps to reproduce?
[StackBlitz link](https://stackblitz.com/edit/angular-kowmq5-pmrkej?file=app/tree-nested-overview-example.ts) line 123

Open the example, and within 10 seconds expand the Applications node.

The following code should add a node, and the node should be displayed:
```ts
database.dataChange.subscribe(data => {
this.nestedDataSource.data = data;
console.log(data); // <-- see screenshot below
});
console.log('Please expand the Applications node within 10 seconds');
setTimeout(() => {
const data = this.nestedDataSource.data;
for (let node of data) {
if (node.filename == "Applications") {
const newnode = new FileNode();
newnode.filename = "ghost";
newnode.type = "gs";
node.children.push(newnode);
console.log("Added component");
}
}
// force change
console.log("Forcing change");
database.dataChange.next(data); // <-- firing event here
}, 10000);
```
After ten seconds the console correctly logs the added component:

![image](https://user-images.githubusercontent.com/1256049/45224934-897b7c80-b2bb-11e8-8c22-c43f356211dc.png)

But the view does not update:

![image](https://user-images.githubusercontent.com/1256049/45224944-91d3b780-b2bb-11e8-9643-167c930d8114.png)

#### What is the use-case or motivation for changing an existing behavior?
I would expect the tree to mirror the underlying data model.

#### Which versions of Angular, Material, OS, TypeScript, browsers are affected?
It happens on chrome, with the latest version of the library.

#### Is there anything else we should know?
Sorry I could not make the example autoexpand (please see #13027 on why)

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

app/tree-nested-overview-example.ts の123行目から始め、遅延更新の前に Applications を展開して問題を再現します。子ノードが追加された後に nestedDataSource.data と database.dataChange がどのように処理されるかを追跡します。変更イベントが発生したときにビューに新しいゴーストノードが表示されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
angular, typescript
領域
frontend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。