除非我进行GET调用,否则angularjs绑定不会显示

时间:2013-11-26 13:57:13

标签: javascript angularjs restangular

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

1 个答案:

答案 0 :(得分:4)

尝试$apply

$scope.$apply(function(){
    $scope.patient = event.data.patient;
});