我有一个模板:
<p class="text-right">
<a ng-click="editTherapeuticProposal(meow.accepted_tp)" class="fa fa-pencil"></a>
</p>
调用其控制器中定义的editTherapeuticProposal函数,将meow.accepted_tp
对象传递给它(这里我使用angular-dialog-service:https://github.com/m-e-conroy/angular-dialog-service):
// here tp is equal to meow.accepted_tp
$scope.editTherapeuticProposal = function(tp) {
dialogs.create('surgeon/templates/create_edit_therapeutic_proposal.tpl.html', 'SurgeonCreateEditTherapeuticProposalCtrl', {scope: $scope, tp: tp}, { copy: false });
};
tp是一个对象。
然后在对话框控制器中我显示一个表单,以便让用户修改tp。我做了一些事情,相关的是:
// data is the object received by the dialog controller: {scope: $scope, tp: tp}
if(typeof data.tp != 'undefined') {
$scope.therapeuticProposal = angular.copy(data.tp);
}
我复制对象以处理不同的对象(如果没有保存,我不希望更新数据)
按对话框中的保存按钮时,将运行以下功能:
var complete = function(tp) {
data.tp = tp;
//...
}
好的,问题是父作用域中的meow.accepted_tp
没有得到更新。如果我做
var complete = function(tp) {
data.tp.title = 'meow';
//...
}
它的标题得到更新。 原型继承显然有问题,我知道为了获得更新变量,它们应该是对象的属性,但是tp已经作为对象属性(数据对象)传递。有任何想法吗?感谢。
答案 0 :(得分:0)
修改强> 重新读取angular-dialog-service文档后,可以使用modalInstance传回结果。听起来这就是你想要做的。 绑定不起作用的原因是因为您正在从子范围更改对象引用,而不是对象绑定的属性(这就是为什么data.tp.title =&#39; meow&# 39;工作)。
无论如何,对于你的情况,试试这个:
// here tp is equal to meow.accepted_tp
$scope.editTherapeuticProposal = function(tp) {
var dlg = dialogs.create('surgeon/templates/create_edit_therapeutic_proposal.tpl.html', 'SurgeonCreateEditTherapeuticProposalCtrl', {scope: $scope, data: data}, { copy: false });
dlg.result.then(function(tp) {
// Get the result and update meow.accept_tp
$scope.meow.accepted_tp = tp;
});
};
然后在对话框中,完成后,执行:
var complete = function(tp) {
$modalInstance.close(tp);
}
例如,请参阅http://codepen.io/m-e-conroy/pen/rkIqv,特别是customDialogCtrl(不是customDialogCtrl2)就是你想要的。