Javascript 服务中的Angularjs推送到阵列将替换以前的项
我正在尝试添加到home.html中的列表,并使用ionic和angularjs在myOrders.html中显示该列表 问题是,当我将一个新项推送到数组中时,以前的项会被新项替换 示例: push'one'->数组为[{'name':one'}] push'two'->数组是[{'name':'two'},{'name':'two'}]//应该是 [{'name':'one'},{'name':'two'}] push'three'->数组是[{'name':'three'},{'name':'three'}, {'name':'three'}]//应该是 [{'name':'one'},{'name':'two'},{'name':'three'}] 我在下面添加了代码的相关部分Javascript 服务中的Angularjs推送到阵列将替换以前的项,javascript,arrays,angularjs,ionic,Javascript,Arrays,Angularjs,Ionic,我正在尝试添加到home.html中的列表,并使用ionic和angularjs在myOrders.html中显示该列表 问题是,当我将一个新项推送到数组中时,以前的项会被新项替换 示例: push'one'->数组为[{'name':one'}] push'two'->数组是[{'name':'two'},{'name':'two'}]//应该是 [{'name':'one'},{'name':'two'}] push'three'->数组是[{'name':'three'},{'name':
home.html
(添加到列表)
controllers.js
angular.module('app.controllers', [])
...
.controller('homeCtrl', function($scope, $state, formData) {
$scope.product = {};
$scope.submitForm = function(product) {
if (product.name) {
formData.updateForm(product);
$state.go('menu.myOrders');
} else {
alert("Please fill out some information for the user");
}
};
})
.controller('myOrdersCtrl', function($scope, formData) {
$scope.product = formData.getForm();
})
angular.module('app.services', [])
.service('formData', [function(){
return {
form: [],
getForm: function() {
return this.form;
},
updateForm: function(item) {
this.form.push(item);
}
}
}]);
services.js
angular.module('app.controllers', [])
...
.controller('homeCtrl', function($scope, $state, formData) {
$scope.product = {};
$scope.submitForm = function(product) {
if (product.name) {
formData.updateForm(product);
$state.go('menu.myOrders');
} else {
alert("Please fill out some information for the user");
}
};
})
.controller('myOrdersCtrl', function($scope, formData) {
$scope.product = formData.getForm();
})
angular.module('app.services', [])
.service('formData', [function(){
return {
form: [],
getForm: function() {
return this.form;
},
updateForm: function(item) {
this.form.push(item);
}
}
}]);
您将一次又一次地将同一对象插入数组。由于对象总是通过引用传递,所以将同一对象的引用推送到数组中。更新对象时,存储在数组中的所有引用都将更改 尝试创建对象的副本,同时传递到
updateForm()
用于创建服务的语法是
工厂的语法。您不应该明确地从服务中返回任何内容。所有的变量和方法都应该放在this
kyeword上为您的代码样本放一个plnker
.controller('homeCtrl', function($scope, $state, formData) {
$scope.product = {};
$scope.submitForm = function(product) {
if (product.name) {
formData.updateForm(angular.copy(product));
$state.go('menu.myOrders');
} else {
alert("Please fill out some information for the user");
}
};
})