$uibModal 即使在关闭后也保持更改

$uibModal keeping changes even after closed

我正在尝试将 uibModal 集成到我的应用程序中,这将允许用户更改设置。我的问题是,如果我对设置进行了更改,然后在不保存的情况下关闭了模态,那么当我打开模态备份时,更改仍然存在。

我有我的普通控制器来打开模式(一切都在 $scope 上):

            var settings = $scope.site.smartboard_settings;


            var modalInstance = $uibModal.open({
                animation: true,
                backdrop: 'static',
                templateUrl: 'app/components/modals/modal.smartboard.settings.tpl.html?bust=' + Math.random().toString(36).slice(2),
                resolve: {
                    Settings: function() {
                        return settings;
                    }
                },
                controller: 'EditSmartboardSettingsModalController',
                controllerAs: '$ctrl'
            });

我有模态控制器:

.controller( 'EditSmartboardSettingsModalController',
    function( $uibModalInstance, $timeout, Settings ) {


        var $ctrl = this;
        $ctrl.settings = Settings;
        $ctrl.submitted = false;



        $ctrl.submitForm = function( isValid ) {
        ...
        ...

所以我打开模式并更改设置。然后我关闭模态并重新打开它,更改的设置仍然被修改。

我知道它一定与 $scope 有关,但是,我认为通过传入 settings 并使用 controllerAs 那么我不应该修改任何内容$scope.

Angularjs 在传递参数时从不处理对象本身——这会非常昂贵。在这种具体情况下,您应该在模态控制器中复制设置,例如:

$ctrl.settings = angular.copy(Settings);