2015-12-24 19 views
7

Bir home.html dosyasında bir listeye ekleme yapmaya çalışıyorum ve listeyi myOrders.html içinde iyonik ve angularjs kullanarak görüntülemeye çalışıyorum.Angularjs dizisi, önceki öğelerin yerine geçer

Sorun şu ki, yeni bir öğeyi diziye bastığımda, önceki öğeler yeni öğeyle değiştirilir.

Örnek:

itme 'bir' -> dizidir [{ 'adı': Bir '}]

itme 'iki' -> dizi [{olan' isim ": 'iki'}, {'name': 'two'}] // olmalıdır [{'name': 'one'}, {'name': 'two'}]

'üç' - > dizi [{'name': 'three'}, {'name': 'three'}, {'name': 'three'}] // olmalıdır [{'name': 'one'} , {'name': 'two'}, {'name': 'three'}]

Kodumun ilgili kısımlarını aşağıda ekledim.

home.html (listeye ekle)

<ion-view title="Home"> 
    <ion-content ng-controller="homeCtrl"> 
     <form ng-submit="submitForm(product)" class="list"> 
      <input ng-model="product.name" type="text"> 
      <input type="submit" value="Search" class="button"> 
     </form>   
    </ion-content> 
</ion-view> 

myOrders.html (Ekran listesi)

<ion-view title="My Orders"> 
    <ion-content ng-controller="myOrdersCtrl"> 
     {{ product }} 
    </ion-content> 
</ion-view> 

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(); 
}) 

services.js

angular.module('app.services', []) 

.service('formData', [function(){ 
    return { 
     form: [], 
     getForm: function() { 
      return this.form; 
     }, 
     updateForm: function(item) { 
      this.form.push(item); 
     } 
    } 
}]); 
+0

dizimi için geçerken

, Nesnenizin kopyasını oluşturma gibi bir şey deneyin. asla "hizmet" inden herhangi bir şeyi kesinlikle iade etmemelisiniz. Tüm değişkenler ve yöntemler bu kyeword – Kulbhushan

+1

kod örnek için bir plnker koymak koymak gerekir – Kulbhushan

cevap

5

Aynı nesneyi tekrar tekrar diziye ekliyorsunuz. Nesneler her zaman referans olarak alındığından, aynı nesnenin referansı diziye aktarılır. Nesneyi güncelleştirdiğinizde dizide saklanan tüm referanslar değiştirilir. `Factory` ait olduğunu hizmetini oluşturmak için kullanılan updateForm()

.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"); 
      } 
     }; 
    }) 
İlgili konular