这是我的情况: 我的应用程序中有一个“编辑”屏幕。要加载此屏幕,我通过window.postMessage事件传入一个对象。我正在我的控制器中为编辑页面监听这个postMessage事件,并将传入的对象分配给我的范围内名为“patient”的属性。然后,在编辑页面标记中,我使用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;
});
}
});
答案 0 :(得分:4)
尝试$apply
:
$scope.$apply(function(){
$scope.patient = event.data.patient;
});