これが私の状況です。アプリに「編集」画面があります。この画面をロードするために、window.postMessage イベントを介してオブジェクトを渡しています。編集ページのコントローラーでこの postMessage イベントをリッスンし、渡されたオブジェクトを「患者」というスコープのプロパティに割り当てています。次に、編集ページのマークアップで、ng-repeat を使用して「患者」オブジェクトの配列にバインドしています。問題は、受信したデータを表示するためにページが更新されないことです。
コントローラーでのイベント ハンドラー コードは次のようになります。
window.addEventListener("message", function(event) {
if (event.data.view === 'edit') {
$scope.patient = event.data.patient;
}
});
患者オブジェクトにバインドするマークアップは次のようになります。
<div ng-repeat="dataItem in patient.fields | filter:{display:true}">
<div class="row" >
<div class="col-xs-12">
{{dataItem.displayName}}:
</div>
</div>
<div class="row" >
<div class="col-xs-12">
<input type="text" style="width: 100%;" ng-model="dataItem.value" /><br />
</div>
</div>
</div>
データは正しく読み込まれ、$scope.patient プロパティは完全に読み込まれますが、画面は更新されません。ただし、RESTAngular を使用して単純な 'GET' 呼び出しを追加し、呼び出しの結果を使用しなくても、ページは正しく更新されます。それはなぜですか?無意味な RESTAngular 呼び出しなしでページを更新するにはどうすればよいですか? RESTAngular 呼び出しで動作するコードは次のとおりです。
window.addEventListener("message", function(event) {
if (event.data.view === 'edit') {
patient = PatientRestangular.one('patients', event.data.patientId);
//this is a hack
//the data will not load on the edit screen without a call to 'get()'
patient.get().then(function(){
$scope.patient = event.data.patient;
});
}
});