2017-12-06 13 views
0

私は非常に奇妙な問題があります。次のコードは、呼び出しの無限ループを生成します。おそらくサーバー側のレンダリング中にのみ、私はそれについては分かりません。AfterViewInitを実装すると、イベント呼び出しの無限ループが発生します

import { Component, AfterViewChecked } from '@angular/core'; 

@Component({ 
    selector: 'test', 
    template: '<div>nothing...</div>' 
}) 
export class TestComponent implements AfterViewChecked { 

    ngAfterViewChecked(): void { 
    console.log('wtf'); 
    } 
} 

次のように正確なエラーメッセージは、次のとおり

要求の処理中に未処理の例外が発生しました。

NodeInvocationException:ノードの呼び出しが60000ミリ秒後にタイムアウトしました。 NodeServicesOptionsの InvocationTimeoutMillisecondsプロパティを設定すると、タイムアウト期間を変更できます。

最初のデバッグ段階では、それはエラーが発生した場合でも、あなたのNode.jsの機能 が常に供給コールバックを呼び出し(または同期例外をスロー )ことを確認することです。それ以外の場合、.NET コードでは、コードが終了したか失敗したかを知る方法がありません。

Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance + d__13.MoveNext()

おかしいは十分ngAfterViewCheckedを実装せずにASP。ネットコアプロジェクトをコンパイルし、それを実装し、HMRでそれを注入すると、エラーが発生していません。それは、サーバー側のレンダリングの段階でエラーが発生する可能性があると私は信じているのですか?

+0

ただ可能性のある鉛を見つけました:https://github.com/MarkPieszak/aspnetcore-angular2-universal/issues/276 – Silverdust

+0

これはまさに私が探しているようですが、彼らは問題を「ゾーンPRはそれをきれいにするために行った。 - どういう意味ですか? – Silverdust

答えて

0

私は同じ問題を抱えていました。コンポーネントが何らかの変更を検出するたびにngAfterViewCheckedが3回呼び出されます。おそらくあなたのサーバーはこのコンポーネントと話しているか、単にあなたがどこかにあると考えています。もう一つの時間は、私は何か(EventListenerを使用して)コンポーネントから同じループを要求していたときにこの問題を抱えていました。代わりにngAfterViewInitを使用してください。または、ngAfterComponentCheckedを試してみてください。しかし、これがうまくいくかどうかはわかりません。

+0

残念ながら、ngAfterViewInitは一度だけ呼び出されるため、これはまったく使用できません。私はビューが変わるたびに呼び出されるフックが必要です;-) – Silverdust

+0

あなたは何を変更したいですか? ngModelの変更を待っているなら、 '(ngModelChange)=" yourFunction($ event) "'でダブルバインディングを使うことができます。 –

関連する問題