2015-06-16 6 views
0

У меня есть ботстрап модальный. При нажатии кнопки закрытия значение массива изменяется, но оно не должно.закрыть кнопку в bootstrap-modal

controller.js

$scope.open = function(){ 

    var modalInstance = $modal.open({ 
     animation: true, 
     templateUrl: 'views/view1.html', 
     controller: 'controller2', 
     resolve: { 
      items: function(){ 
       return $scope.array; 
      } 
     } 
    }); 
modalInstance.result.then(function (changed_array){ 
     $scope.array = changed_array; 
    },function(){ 
     // no change 
    }); 
}; 

код второго контроллера

angular.module('storagewebApp').controller('controller2',function($scope, $modalInstance, items) { 
$scope.array = items; 
$scope.ok = function(){ 
    $modalInstance.close($scope.array); 
}; 
$scope.cancel = function(){ 
    $modalInstance.dismiss('cancel'); 
}; 

});

view2.html

 <div class="modal-header"> 

    <h4 class="modal-title">Set threshold</h4> 
    </div> 
    <div class="modal-body"> 
    <div class="form-group" align="left"> 
    <div> E:</div> <input type="text" ng-model="array[0]"> 
    <div> M:</div><input type="text" ng-model="array[1]"> 
    <div>T:</div><input type="text" ng-model="array[2]"> 
    <div>F: </div><input type="text" ng-model="array[3]"> 
    <div> I:</div><input type="text" ng-model="array[4]"> 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-warning" ng-click="cancel()">Close</button> 
    <button type="button" class="btn btn-primary" ng-click="ok()">Save</button> 
    </div> 
</div> 

Значение изменяется с помощью поля ввода, но при нажатии кнопки близких значений не должно быть направлены к первому контроллеру, но по нажатию кнопки закрытия значения измененного массива передаются первым контроллер ,

+0

Значения изменяются даже при нажатии кнопки закрыть, потому что при открытии модального вы передаете ссылку вашего массива от первого контроллера, а в модульном контроллере вы все еще манипулируете этой ссылкой. Попробуйте в модульном контроллере использовать: $ scope.array = angular.copy (items); –

+0

Этот код работает в chrome и firefox, но в IE он не сохраняет значение в переменной области видимости, то есть в поле ввода предыдущие значения не появляются и после изменения значений в окнах ввода эти изменения не отражаются в переменной области видимости , –

ответ

0

Вы должны создать новую область для модального окна. Как это:

var modalScope = angular.extend(
    $scope.$new(), { 
     val1ToPassToModal: $scope.originalValue1, 
     val2ToPassToModal: $scope.originalValue2, 
    }); 

$modal.open({ 
    templateUrl: '…', 
    controller: '…', 
    scope: modalScope, 
    resolve: { 
     … 
    } 
}); 

Конечно, если вы не хотите, чтобы передать новые значения в модальном окне, вы можете написать просто:

scope: $scope.$new().

1

Это поведение является общей ошибкой AngularJS/JavaScript. Когда вы создаете экземпляр своего модального контроллера, вы передаете ссылку своего массива. Затем внутри вашего модального контроллера вы управляете этой ссылкой, даже если вы не передадите ее обратно.

Когда вы пишете:

$scope.array = items 

Что happends в памяти, что $ scope.arra у указывает на то же место, пунктов. При изменении каким-либо образом $ scope.array объект, который вы изменяете items также.

В качестве решения вам необходимо глубоко скопировать исходный массив в новый, создав таким образом новый объект и ссылку. AngularJS имеет встроенную функцию, которая делает это: https://docs.angularjs.org/api/ng/function/angular.copy

angular.copy 

Смотрите эту plunkr, например: http://plnkr.co/edit/W6EYUwQ1K1YAnfnJ2r4a?p=preview

Смежные вопросы