When I loop through the $http post service for Angularjs
for (var i = 0; i < $scope.tagStyles.length; i++) {
$scope.profilTag.tag = $scope.tagStyles[i].
The $http service will not actually send the request until the next $digest() is executed.
What probably happens is that $scope.profilTag is being passed by reference to $http and only being sent after a $digest. You override that reference each iteration and that's why you only left with your last item.
Be aware that functions has scopes but for loops don't!
$scope.tagStyles.forEach(function(item){
var profilTag = {
tag: item.id_tag,
texte: item.style,
profil: lastDocId,
};
$http.post('/ajouterProfilTag',profilTag)
.success(function(data) {
if (data=='err'){
console.log("oops");
}
});
});
You may want to use AngularJs promise API.
var promiseArray = [];
for (/*your loop statements*/) {
promiseArray.push($http.post('/url', $scope.var));
}
$q.all(promiseArray).then(function(dataArray) {
// Each element of dataArray corresponds to each result of http request.
});
See Usage->returns section in $http service docs, to understand what is returned via dataArray parameter.
It is happened because request makes asynchronously. Real requests are sending after all iterations have completeted. Try send copy of params like this
$http.post('/ajouterProfilTag',angular.copy($scope.profilTag))