这是我的情况:
我的应用程序中有一个“编辑”屏幕。为了加载此屏幕,我通过 window.postMessage 事件传递一个对象。我正在编辑页面的 Controller 中监听此 postMessage 事件,并将传入的对象分配给我的作用域上名为“患者”的属性。然后,在编辑页面标记中,我使用 ng-repeat 绑定(bind)到我的“病人”对象上的数组。问题是,页面没有更新以显示收到的数据。
这是我的 Controller 中的事件处理程序代码的样子:
window.addEventListener("message", function(event) {
if (event.data.view === 'edit') {
$scope.patient = event.data.patient;
}
});
以下是绑定(bind)到患者对象的标记:
<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.patent 属性已完全填充,但屏幕未更新。但是,如果我使用 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;
});
}
});
最佳答案
尝试$apply
:
$scope.$apply(function(){
$scope.patient = event.data.patient;
});
关于javascript - 除非我进行 GET 调用,否则 angularjs 绑定(bind)不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219051/