2017-09-01 11 views
1

プロジェクトでは、角度4のn2-handsontableを使用しています。私は、データが変更されたときにテーブルをリフレッシュする方法を理解できないようです。私はこの記事を見つけました:Refresh Handsontable Angular 4

Refresh a handsontable

私が欲しいもののようですが、私はhandsontableオブジェクトにアクセスする方法を見つけ出すことはできません。私の最初の考えはバインディングのために#を使用することでしたが、それは意図したとおりに動作していない、それは関数に '未定義'を渡すだけです。

<button class="btn btn-default" (click)="add(hot)">Add</button> 
<hotTable [data]="_dataHot" 
        [colHeaders]="_columnHeadersHot" 
        [columns]="_columnsHot" 
        [options]="{contextMenu: true}" 
        #hot> 
</hotTable> 

component.ts

add(hot){ 
    //do stuff 
    hot.render(); 
} 

編集

component.html:私はngIfのトリックを行うことによって、レンダリングを強制することができますが、それは良い解決策のように見えるしていません。

答えて

2

私は最初は同じ問題があり、レンダリング機能にアクセスする方法を理解できませんでした。 component.tsファイル内の次の行を使用すると、私のトリックになります。

hot.getHandsontableInstance().render(); 

私がよく分からないことは、#hotがあなたのために未定義を返す理由です。私は下に私のコードスニペットを掲載しています。

component.html

<hotTable 
    [data]="data" 
    (afterChange)="afterChange($event, hot)" 
    [colHeaders]="colHeaders" 
    [columns]="columns" 
    [options]="options" 
    [colWidths]="colWidths" 
    #hot> 
</hotTable> 

component.ts

private afterChange(e: any, hot) { 
    // some commands 
    hot.getHandsontableInstance().render(); 
} 
+0

私はダムです。私は#hotchild()を使うときに、#hotを使い、関数にオブジェクトを渡す必要があるとは思いませんでした。ありがとう! – Calidus

2

hotへの参照をViewChildデコレータを使用してコード内に取得する必要があります。同じ名前の変数に格納することができます。

@ViewChild('hot') hot 

今、あなたはthis.hotとして、あなたのクラスでコンポーネントのインスタンスにアクセスすることができます。

+0

支援のおかげで、 'ViewChild'は方向のステップです。 'render()'はhandsontableコンポーネントの有効な機能ではないようです。 'render()'を持っているが 'getHandsontableInstance()'が 'handsontable'クラスを返す' getHandsontableInstance() 'がありますが、' getHandsontableInstance() 'は試行して使用するときに未定義に戻っています。 – Calidus