2017-04-07 3 views
1

現在、特定の関数を呼び出す必要がある、そしてページのすべての要素がロードされた後にのみ、Angular 2プロジェクトで作業しています。私はObservableからeventFrom関数を使用しようとしましたが、これは 'クリック'操作を期待していましたが、一旦 'ロード'に切り替えると、全く起動しませんでした。 。火災のいずれかRxjs-DOMロード関数が角2を発生させない

ここでは、私が今持っているコードです:

ngAfterViewInit(): void { 
 
    let input = this.container.nativeElement.getElementsByClassName('list-item'); 
 

 
    let source = Rx.DOM.load(input); 
 

 
    let subscription = source.subscribe((x) => { 
 
     console.log('Next!'); 
 
    }, 
 
    (err) => { 
 
     console.log('Error: ' + err); 
 
    }, 
 
    () => { 
 
     let temp = this.container.nativeElement.getElementsByClassName('list-item'); 
 
     console.log(temp.length); 
 
    }); 
 

 
}
<div class="list-wrapper"> 
 
    <div class="list"> 
 
    <div class="list-item" *ngFor="let item of items"> 
 
     <img src={{item.image}} alt="{{item.title}}"> 
 
    </div> 
 
    </div> 
 
</div>

"@angular/core": "4.0.1", 
    "@types/rx-dom": "^7.0.0", 
    "angular2-infinite-scroll": "0.3.4", 
    "gulp-run": "1.7.1", 
    "rxjs": "5.2.1-smooth" 

temp.length私はtimeout番目に設定した場合は常に0 ですすべての要素が2〜3秒間ロードされてからtempが空でない場合、完全に動作します。しかし、タイムアウトはこの場合望ましくありません。 私が間違っていることはありますか? もう1つの質問は、すべてのdom要素が実際にロードされた後にのみ、関数を呼び出すためにAngular 2に他の方法があるかどうかです。

ありがとうございます。

答えて

1

try ngZone.run。それは最新のモデルのために角張った再レンダリングを可能にする。あなたの応答は

+0

です。私はこの例[https://blog.thoughtram.io/angular/2016/02/01/zones-in-angular-2.html]を使用して、必要な作業をしているようです。しかし、それはまさにあなたが意味するものなのでしょうか、あるいは私は何かを誤解しましたか? – CannotCode

+0

@CannotCodeはい、NgZoneの部分とほぼ同じことです。 '非同期呼び出し'では、角度のゾーンやライフフックから 'ngZone.run'を呼び出すことで角度レンレンダリングが可能になることがあります。 – Pengyy

関連する問題