2015-12-24 6 views
7

मैं होम.html में एक सूची में जोड़ने की कोशिश कर रहा हूं और आयनिक और कोणीय का उपयोग करके myOrders.html में सूची प्रदर्शित कर रहा हूं।एंगुलरज सेवा में सरणी को धक्का देता है पिछले आइटम

समस्या यह है कि जब मैं सरणी में एक नया आइटम दबाता हूं, तो पिछली वस्तुओं को नए आइटम के साथ बदल दिया जाता है।

उदाहरण:

पुश 'एक' -> सरणी है [{ 'name': एक '}]

पुश' दो '-> सरणी [{है' name ': 'दो'}, {'name': 'two'}] // [{'name': 'one'}, {'name': 'two'}]

पुश 'तीन' होना चाहिए - > सरणी है [{'name': 'three'}, {'name': 'three'}, {'name': 'three'}] // होना चाहिए [{'name': 'one'} , {'name': 'two'}, {'name': 'three'}]

मैंने नीचे दिए गए मेरे कोड के प्रासंगिक भाग जोड़े हैं।

home.html (सूची में जोड़ें)

<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 (प्रदर्शन सूची)

<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

सिंटेक्स सेवा बनाने के लिए इस्तेमाल किया करने के लिए गुजर 'factory' का है

, अपने वस्तु की प्रतिलिपि बनाने की तरह कुछ की कोशिश करो। आपको कभी भी अपनी 'सेवा' से कुछ भी वापस नहीं करना चाहिए। सभी चर और विधियों को 'this' kyeword – Kulbhushan

+1

पर रखा जाना चाहिए, जो आपके कोड नमूने के लिए एक प्लेंकर डाल दें – Kulbhushan

उत्तर

5

आप एक ही ऑब्जेक्ट को बार-बार सरणी में डाल रहे हैं। चूंकि ऑब्जेक्ट्स हमेशा पास-बाय-रेफरेंस होते हैं, इसलिए उसी ऑब्जेक्ट का संदर्भ सरणी में धकेल दिया जाता है। जब आप ऑब्जेक्ट को अद्यतन करते हैं तो सरणी में संग्रहीत सभी संदर्भ बदल जाते हैं। जबकि 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"); 
      } 
     }; 
    }) 
संबंधित मुद्दे