在取消角度mddialog后仍然编辑的传递值

时间:2016-05-18 08:17:29

标签: javascript angularjs angular-material mddialog

我将一个值传递给我的mdDialog控制器来编辑模态中的内容,但是用户取消模态没有调整可以保存,但是如果我更改为模态中的内容,我会看到发生的变化列表后面(在父视图上),当我取消模态时,更改不会被撤消。 选项bindToController设置为true,因此应传递副本而不是引用。

vm.editFaq = function   (faqToEdit, ev){

     var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && vm.customFullscreen;

    $mdDialog.show({
        controller: 'editFaqController'
        , controllerAs: 'dvm'
        , templateUrl: './app/components/faq/modals/editFaq.html'
        , parent: angular.element(document.body)
        , targetEvent: ev
        , clickOutsideToClose: true
        , fullscreen: useFullScreen
        , locals: { faq : faqToEdit }
        , bindToController: true
    }).then(function(result){
        if(result){
            _.findWhere(vm.allFaqs, { _id: faqToEdit._id }) = result;
        }
    });

    $scope.$watch(function () {
        return $mdMedia('xs') || $mdMedia('sm');
    }, function (wantsFullScreen) {
        $scope.customFullscreen = (wantsFullScreen === true);
    });
};

因此,当隐藏模态时,"然后"调用promise,可以提交调整。

2 个答案:

答案 0 :(得分:1)

我使用了angular.copy,一位朋友告诉我,即使使用bindToController,或者说mdDialog的其他任何选项仍然会传递对象的引用。

答案 1 :(得分:0)

你可以这样解决:

     vm.editFaq = function   (faqToEdit, ev){

 var useFullScreen = ($mdMedia('sm') || $mdMedia('xs')) && vm.customFullscreen;

          faqToEdit = angular.copy(faqToEdit);

          $mdDialog.show({
            controller: 'editFaqController',
            controllerAs: 'dvm',
            templateUrl: './app/components/faq/modals/editFaq.html',
            parent: angular.element(document.body),
            targetEvent: ev,
            clickOutsideToClose: true,
            fullscreen: useFullScreen,
            locals: {
              faq: faqToEdit
            },
            bindToController: true
          }).then(function(result) {
            if (result) {
              _.findWhere(vm.allFaqs, {
                _id: faqToEdit._id
              }) = result;
            }
          });

        }