2016-07-03 9 views
0

電子&ノードを使用して角度2のアプリケーションを作成しています。サーバー上で実行されるテストがあり、結果はtestResultsというグローバル変数配列に1つずつ出力されます。しかし、私は、オブジェクトが配列に追加されたときにイベントをトリガーする角度になっ運を持っていない角型2のグローバルサーバー側変数の変更を見る方法

declare var testResults: any; 

:私が使用して角度にそれを引っ張って何の問題もありません。この配列の変更を監視する方法はありますか?私はonChangesとdoCheckを試したが運がなかった。

これは私が私のコンポーネントを持っているものです。

import {Component, Input, OnChanges, SimpleChange, OnInit} from   'angular2/core'; 

declare var testResults: any; 

@Component({ 
selector: 'test-results', 
template: `{{ testResultsItem }} 
`, 
}) 

export class TestResultsComponent implements OnChanges{ 
    @Input() testResultsItem = testResults; 

ngOnChanges(changes: {[ propName: string]: SimpleChange}) { 
    console.log('Change detected:', changes[this.testResultsItem].currentValue); 
    console.log(this.testResultsItem); 
} 
} 

私はすべてが第二私はコンソールの配列の変更を参照していますコンソールでその配列をログに記録するsetIntervalを実行すると。また、{{testResults}}のDOM内で更新されます。しかし、角度がsetIntervalを実行するのではなく、この変更を検出する方法が必要ですか?どんな助けもありがとう!私が使用してIterableDiffersしようとしたときにここで

です:あなたがあなたのtempalteを変更した場合

import {Component, Input, OnChanges, SimpleChange, OnInit, IterableDiffers, ChangeDetectorRef, IterableDiffer, Directive, DoCheck} from 'angular2/core'; 

declare var testResults: any; 

@Component({ 
selector: 'test-results', 
template: `{{ testResultsItem | json }} 
`, 
inputs: ['testResults'] 
}) 

export class TestResultsComponent implements DoCheck{ 

private testResultsItem = testResults; 
private differ:IterableDiffer; 
constructor(private changeDetector:ChangeDetectorRef, private differs:IterableDiffers) { 
this.differ = differs.find([]).create(null); 
} 

set testReults(test:any) { 
    this.testResultsItem = test; 
    if (test && !this.differ) { 
     this.differ = this.differs.find(test).create(this.changeDetector); 
    } 
} 
ngDoCheck(){ 
    if (this.differ) { 
     const changes = this.differ.diff(this.testResultsItem); 
     if (changes) { 
      console.log('FIRE!'); 
     } 
    } 
    } 
} 
+0

角度変化を検出する必要がありますまたはアレイ。オブジェクト参照がチェックされているかどうかをチェックするだけです。 'IterableDiffer'を使って' ngDoCheck'の変更をチェックすることができます。あなたが試したことを示すコードを投稿してください。 'testResults'を変更するコードはどこですか? –

+0

testResultsは、インデックスにリンクされているmain.jsファイルで作成されます。そこから、配列内のオブジェクトを返すreporter.jsというjsファイルへの呼び出しがあります。 IterableDifferで実装しようとしました。残念ながら、まだ起動できません。上記のコードを元の投稿に追加しました。 – kahls

答えて

0

template: `{{ testResultsItem | json }} 

そしてAngular2は、オブジェクト内の変更をチェックしません

+0

私はこれを試みましたが、コンソールに「変更が検出されました」という文字列を記録しませんでした。 – kahls

+0

上記のコメントの質問はどうですか?コード内の入力を変更した場合、 'ngOnChanges'は呼び出されません。これは ''の 'valueFromParent'が変更を検出し、バインディングの更新がバインディングを更新するときにのみ呼び出されます。 'testResultsItem'を新しい値が代入されるたびにコードを実行するように設定することができます。 –

+0

私はIterableDiffersを試みただけですが、配列への変更があった場合には起動できませんでした。上記のコードを元の質問に掲載しました。あなたがvalueFromParentと言ったら何を指していますか?親コンポーネントからのクリックイベントと同様? ngOnChangeまたはIterableDiffersとDoCheckでこれを使用する必要がありますか? – kahls

関連する問題