我有一个名为ClaimController
的控制器,用于存储各种对象,例如Patient
,Prescriber
等。为了简单起见并且能够重用,我创建了另一个控制器PatientController
,并为我需要的每个组件创建了类似的其他控制器。因此,如上所述,ClaimController
的片段如下所示。
testApp.controller('ClaimController', [
'$scope', ...,
function($scope, ...){
var vm = this;
vm.Patient = {}
.....
}]);
然后PatientController
看起来像这样:
testApp.controller('PatientController', [
'$scope', ... ,
function ($scope, .. ){
var vm = this;
vm.Patient = {};
....
}]);
我在PatientController
和ClaimController
中拥有对象vm.Patient的原因是我可以在其他地方使用PatientController
并且还可以为给定的患者关联声明。
因此,PatientController
存储Patient对象(或对其进行的任何更改)。然后,当ClaimController
上单击“保存”按钮时,vm.Patient
对象应具有来自vm.Patient
的{{1}}对象。为此,我甚至创建了一个指令:
PatientController
模板:
testApp.directive('patientInfo', function(){
return {
restrict: 'A',
transclude: false,
templateUrl: 'path/to/template',
controller: 'PatientController',
controllerAs: 'patCtrl',
scope: {
patient: '='
},
link: function(scope, element, attrs){
}
}
}
但是,即使<div ng-controller="ClaimController as ctrl">
<div patient-info patient="ctrl.Patient"></div>
</div>
中的vm.Patient
包含数据,ClaimController
对象中的vm.Patient
始终为空,这对我不起作用。所以数据没有通过。我怎样才能解决这个问题?
答案 0 :(得分:0)
因此,我最终为我正在观看的数组或对象而不是每个字段创建$watchCollection
,并将数据保存在共享服务中以供稍后其他组件使用。我删除了该指令并将$watchCollection
放在PatientController
中,使其保持简单。
$scope.$watchCollection('patCtrl.Patient', function(newVal, oldVal){
SharedService.setPatient(newVal);
});
模板现在不依赖于ClaimController
。由于所有组件都有SharedService
,因此当用户点击ClaimController
按钮时,save
可以检索数据。
答案 1 :(得分:-1)
您的代码几乎是正确的,只是代码中的一个错误。您需要使用数据方法而不是“患者信息患者”
<div ng-controller="ClaimController as ctrl">
<div data-method="ctrl.Patient"></div>
</div>