2017-10-25 8 views
0

解決: 問題はrxJSスレッドで発生しました。 1つのスレッドが頻繁に空の配列を渡したため、テーブルがリセットされました。角度4のcdkテーブルtrackbyが機能しません。テーブル全体が再レンダリングされます

テーブルは4秒ごとに更新されます。点滅を止めるには、trackBy関数を適用します。私は関数がトリガされているが、テーブル全体が再レンダリングされていることがわかります。私は何か間違っていると思う。 私は何をしますか... トラッキング機能を設定します。

<mat-table ... [trackBy]="trackById"> 

トラッキング機能を実装します。

trackById(index, item) { 
    console.log(item._id); 
    return item._id; 
    } 

テーブルは、テーブルのデータソース更新によって更新されます。

updateOperations() { 
    this.dataSource = new Source(this.forexService); 
    } 

全体の成分はここにあるhttps://gist.github.com/vlikin/6f130c53b1fd38116afe20d15a2afc40です。

このコンポーネントは、操作のリストを表示します。 2つの観測値からデータを取得します。テーブルのデータソースは一度作成されます。データの変更は、Behavior Subjectデータによって開始されます。データ再処理プロセスは、関数updateにあります。 mat-tableコンポーネントは、出力を最適化する必要のあるディレクティブtrackByを使用します。しかし、それはまだ点滅しています。

trackIdとない2 plunksありますと - すべてのそのような効果はありませんhttps://embed.plnkr.co/Rc9z9aXlalQe8yWpGjUq/

からhttps://embed.plnkr.co/wK5Jh4tIgY9p9Gw4rfhx/ はなしで。私のアプリケーションでは、それは点滅しています。

誰でも私を助けてくれることを願っています。よろしく。

+0

アイテム//またはインデックスと* ngFor ".....; trackBy:trackById"を返すだけです。 ngForを使用していない場合は、コードを投稿してください – Vega

+0

全体のコンポーネントはhttps://gist.github.com/vlikin/6f130c53b1fd38116afe20d15a2afc40です。 このコンポーネントは、操作のリストを表示します。 2つの観測値からデータを取得します。テーブルのデータソースは一度作成されます。データの変更は、Behavior Subjectデータによって開始されます。データ再処理プロセスは、 'update'関数内にあります。 mat-tableコンポーネントは、出力を最適化する必要のあるディレクティブtrackByを使用します。しかし、それはまだ点滅しています。 –

+0

Mat-tableには、trackByIdメソッドでconsole.logを設定すると、(もしあれば)その例であれば、知っている限り、trackby属性はありません。それは属性ではないという私の考えを強化する – Vega

答えて

0

これは論理的な問題でした。 DataSourceは少数のストリームから結合されました。ストリームの1つがデータをリセットしました。

関連する問題