をトリガー、私のDOMオブジェクトは次のようになります。 ')checkCam1Exists(' このようになりますコンポーネント、関数内角度2を手動で現在ngIf
<div *ngIf="checkCam1Exists()">
<app-counter [index]="1"></app-counter>
</div>
:
cameraServiceがAでcheckCam1Exists(){
console.log("checkCam1ran");
if(this.cameraService.camera1 == null){
return false;
}
else{
return true;
}
}
サービスはコンポーネントコンストラクタに注入され、camera1はcameraService内のオブジェクトです。
私の問題は、ngIfを再度実行することにあります。 camera1オブジェクトは、別のサービス(HTTPリクエストを作成するdataService)内から更新されます。 ngIfを再度実行するにはどうすればよいですか?
私は以下の記事を読んでいます: Triggering Angular2 change detection manually - しかし、Angularドキュメントで提供されている例では、コンポーネントクラス外の変数をチェックする方法をカバーしていないようです(サービス変数をチェックする必要があります)。これは、これを行うには信じられないほど非効率的な方法のように感じますが
constructor(private ref: ChangeDetectorRef, private cameraService: CameraService, private toolbarService: ToolbarService) {
ref.detach();
setInterval(() => {
this.ref.detectChanges();
}, 5000);
}
:
EDITは、私が使用して作業自動変更検出を得ることができました。変更検出を手動でどのようにトリガーできますか?
はEDIT 2ルーカスTétreaultからの助けを借りて
、私は私が原因(最初のクリックイベントの後)アプリケーションとの相互作用として、初期のクリックイベントのための角度2ゾーンの外に出るかもしれないと思います変更を検出して作業を再開する必要があります。 私の問題はここになければならない:
map.data.addListener('click', (event) => {
var mapElement = event.feature.getProperty('type');
switch(mapElement){
case 'classifiedroads':
var roadnumber = event.feature.getProperty('roadID');
map.data.revertStyle();
map.data.overrideStyle(event.feature, {
strokeWeight: 8
});
this.roadService.roadClicked(roadID);
break;
case 'cameras':
var cameraID = event.feature.getProperty('trafficID');
this.cameraService.cameraClicked(cameraID); //camera is initialised at this stage.
break;
default:
break;
}
});
私はJavaScriptを使用してインポートしたGoogle Mapオブジェクトを持っている(私はことを使用していない、なぜ私はそれに対して警告したAngular2 Googleマッププロジェクトでの制限があります)。このクリックイベントはAngular 2ゾーン外に出なければなりません。アプリケーションの他の場所をクリックすると、Angular 2ゾーンに再び入り、ngIf変化検出が再び開始されます。
ngIf変更検出を手動で強制的に強制する方法はありますか?
あなたがHTMLNG-IF = "cameraService.camera1!= null" の中で、この権利を行うことができ
私は注射されたサービスをHTMLから直接参照することができなかったので、あなたの答えを+1したいと思います(そのアドバイスをいただきありがとうございます)。残念ながら、ngIfをまだ手作業で起動する必要があるのと同じ問題があります一度、cameraServiceオブジェクトが変更されます。 – fila
コンポーネントの変更が検出されると、サービスへの変更が反映されます。 http://plnkr.co/edit/lxgAJs –
あなたのアドバイスを参考にして、さらに検討しました。最初のクリック(JavaScriptを使用してインポートされたGoogle Mapオブジェクト)のためにAngular 2ゾーンの外に出ています。 Googleマップで静的オブジェクトをクリックするとJavaScriptがクリックイベントを処理します(Google Mapsのため)、変数が更新されてもngIfの変更の検出は起こりません。他の場所をクリックすることで、どこにいてもウェブサイトとやり取りすると、ビューが更新され、カメラが表示されます。私はマップのクリックイベントのためにngZoneを調べなければならないと仮定します。 – fila