【问题标题】:angular-dialog-service update parent scope data objectangular-dialog-service 更新父范围数据对象
【发布时间】:2019-07-23 05:00:11
【问题描述】:

我有一个模板:

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

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    编辑 重新阅读 angular-dialog-service 文档后,您可以使用 modalInstance 将结果传回。听起来这就是你想要做的。 您的绑定不起作用的原因是因为您正在从子范围更改对象引用,而不是对象绑定上的属性(这就是 data.tp.title = 'meow' 起作用的原因)。

    无论如何,对于你的情况,试试这个:

    // 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)。

    【讨论】:

    • 好吧,我不能这样做data.accepted_tp = tp,因为这样的表单控制器是通用的,应该能够保存各种tps,而不仅仅是公认的。这就是我传递 tp 对象的原因(如果我知道父属性的名称,则无需这样做)。 data.tpdata 是我传递给对话框控制器的对象:{scope: $scope, tp: tp}
    • 我已经编辑了问题,更改了一些可能会让您感到困惑的变量名称。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多