angular-dialog-service更新父范围数据对象

时间:2015-07-24 12:26:09

标签: angularjs

我有一个模板:

<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已经作为对象属性(数据对象)传递。有任何想法吗?感谢。

1 个答案:

答案 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)就是你想要的。