AngularJS - Reset $scope.data к исходным значениям
Я создал скрипку здесь: http://jsfiddle.net/nicktest2222/W4VaA/
Я просто хочу нажать кнопку reset и вернуть мои исходные значения. Кто-нибудь знает лучший способ сделать это?
Заранее спасибо
function TodoCtrl($scope) {
$scope.data = [
{text:'learn angular', done:true},
{text:'build an angular app', done:false}];
$scope.orig = [$scope.data];
$scope.reset = function() {
$scope.data = $scope.orig;
};
}
Ответы
Ответ 1
Проблема заключается в механике клонов JS. Все, что вам нужно сделать, это создать глубокую копию вашей модели:
function TodoCtrl($scope) {
$scope.data = [
{text:'learn angular', done:true},
{text:'build an angular app', done:false}
];
$scope.orig = angular.copy($scope.data);
$scope.reset = function() {
$scope.data = angular.copy($scope.orig);
};
}
Вот обновленная скрипта.
Ответ 2
Простейшим вариантом является использование angular.copy
для клонирования исходных данных, а затем снова для reset данных в $scope
.
function TodoCtrl($scope) {
$scope.data = [
{text:'learn angular', done:true},
{text:'build an angular app', done:false}
];
var originalData = angular.copy($scope.data);
$scope.reset = function() {
angular.copy(originalData, $scope.data);
};
}
Изменить: angular.copy
при условии, что два значения опустят целевой объект или массив перед копированием исходных значений в него. Это может быть действительно полезно при работе с дочерними областями.
Ответ 3
madhead работает изначально, но потом данные указывают на $scope.orig и reset больше не будут работать. Вам понадобится сделать копию в reset, чтобы она тоже работала.
Отредактированная безумная работа:
http://jsfiddle.net/W4VaA/2/
function TodoCtrl($scope) {
$scope.data = [
{text:'learn angular', done:true},
{text:'build an angular app', done:false}
];
$scope.orig = angular.copy($scope.data);
$scope.reset = function() {
$scope.data = angular.copy($scope.orig);
};
}