2014-04-23 127 views
0

我有一个希望像一个网址的应用程序:调用角资源功能初始化只能在初始化

http://localhost:8000/admin/patients?uuid=643fa655-b82a-4c02-b445-62d2c966867d 

因此,如果UUID存在,则加载患者数据,这正与以下代码:

var loadPatientChart = function(uuid){ 
    PatientsResource.getPatient({ 
     patientID:uuid 
    }, 
    function(patient){ 
     $scope.patient = patient.data[0]; 
     console.log($scope.patient); 
    }); 
}; 

if ("uuid" in $location.search()) { 
    var obj = $location.search(); 
    loadPatientChart(obj.uuid); 
} 

我遇到的问题是,我以后需要再次致电loadPatientChart同一控制器上使用:

var unbind = $scope.$on('emmittedPatientUuid', function(event, uuid) { 
    console.log('emmittedPatientUuid'); 
    loadPatientChart(uuid); 
}); 
$scope.$on('$destroy', unbind); 

这调用了函数,我可以验证数据是否返回,$ scope是否使用batarang更新,但视图没有更新。没有更改可见。如果我在init中删除调用,那么emit函数按预期持续工作。我也尝试过在函数结束时调用$ apply而没有快乐。任何帮助,将不胜感激。

回答

0

你有没有试过这样称呼它?

function(patient){ 
    $scope.$apply(function(){ 
     $scope.patient = patient.data[0]; 
     console.log($scope.patient); 
    }) 
}); 
+0

是的,我收到此错误: 错误:[$ rootScope:inprog] $已经消化进度 HTTP:/ /errors.angularjs.org/1.2.16/$rootScope/inprog?p0=%24digest – krosullivan

+0

如果范围更新,那么它显然是一个$消化问题'$范围。$ apply'或'$范围。$ digest'应该修复它 – maurycy

+0

是啊,这是我的第一直觉很好,但我曾经尝试都$范围。$应用和$范围。$消化喜欢你的答案以及其他的变化,但不能似乎破解它。错误链接建议在超时中进行包装,但这也不起作用。 – krosullivan

0

原来这是一个愚蠢的错误。我应该用$ rootScope $发出,而不是因为广播是在$ rootScope

var unbind = $rootScope.$on('emmittedPatientUuid', function(event, uuid) { 
    loadPatientChart(uuid); 
}); 
$scope.$on('$destroy', unbind); 
+0

我认为你不应该在那里使用$ rootScope,你使用过广播还是发射?从事件名称'$ rootScope $上(“emmittedPatientUuid”,函数(事件,UUID){'我会说这是发射和发射发送事件了树而广播从父母到孩子的做下来的树 - 希望这是任何意义 – maurycy