这是我的情况:我的应用程序中有一个“编辑”屏幕。为了加载这个屏幕,我通过 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;
});
}
});