【问题标题】:$uibModal keeping changes even after closed$uibModal 即使在关闭后也保持更改
【发布时间】:2019-05-23 05:55:57
【问题描述】:

我正在尝试将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 modal-dialog angular-ui-bootstrap


    【解决方案1】:

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

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

    【讨论】:

    • 感谢@Petr,这当然解决了我的问题。那么现实地说,这就是我应该如何处理所有模态实例的方式吗?
    • @Riples 经常。在某些情况下,当您不想复制所有内容和/或想要修改某些内容时,您可以手动复制:$ctrl.settings = {prop: Settings.prop, prop2: Settings.prop2.toUpperCase(), ...}跨度>
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多