2014-10-16 4 views
8

के साथ स्वतंत्र रूप से किसी सरणी के प्रत्येक ऑब्जेक्ट में संपत्ति जोड़ना मेरे पास एक ऑब्जेक्ट और पहले चरण पर बनाए गए कई गुणों के साथ एक मौजूदा सरणी है। यह निम्नलिखित समारोह द्वारा बनाई गई है:AngularJS angular.extend

$scope.recordlist = extractRecordJSONFromLocalStorage(); 
$scope.addRecord = function() { 
    $scope.recordlist.push(
      { 
       date: $scope.dateJson, 
       time: $scope.time, 
       car: $scope.carList.code, 
       driver: $scope.driverList.name, 
       from: $scope.locationList.place, 
       destination: $scope.locationList2.place, 
       pax: $scope.paxList 
      } 
     ); 

    $scope.custom = $scope.custom === false ? true: false; 
    $scope.carList = 0; 
    $scope.driverList = 0; 
    $scope.locationList = 0; 
    $scope.locationList2 = 0; 
    jsonToRecordLocalStorage($scope.recordlist); 
}; 

यह निम्न सरणी में परिणाम:

[{ 
    "date":"2014 10 16", 
    "time":"20.22", 
    "car":"396", 
    "driver":"Seb", 
    "from":"A", 
    "destination":"B", 
    "pax":"3" 
}] 

मुझे क्या करना कोशिश कर रहा हूँ के साथ अगले कदम पर मौजूदा वस्तु में एक और संपत्ति को जोड़ने के लिए है एनजी-क्लिक करें। मैंने निम्नलिखित फ़ंक्शन के साथ प्रयास किया है लेकिन यह काम नहीं कर रहा है।

$scope.insertRecord = function (recordlist) { 

    var arrival = { 'arrival' : moment().format("HH.mm") } 
    console.log(arrival) 
    angular.extend($scope.recordlist, arrival) 


    jsonToRecordLocalStorage($scope.recordlist); 
} 

अंतिम परिणाम के लिए मैं देख रहा हूँ निम्नलिखित है:

[{ 
    "date":"2014 10 16", 
    "time":"20.22", 
    "car":"396", 
    "driver":"Seb", 
    "from":"A", 
    "destination":"B", 
    "pax":"3", 
    "arrival":"23.10" 
}] 

हो सकता है कि ध्यान में भी लेने के लिए एक और बात यह है कि अनुप्रयोग में यह कई अलग अलग वस्तुओं के होने की संभावना मौजूद है सूचीबद्ध किया जा रहा है , कुछ जिनमें arrival संपत्ति पहले से परिभाषित है, लेकिन कुछ जो बाद में इसे बाद में रखेंगे।

कोई बात नहीं?

संपादित

2 समाधान मैंने काम किया गया है, लेकिन पूरा नहीं था कि मैं क्या देख रहा हूँ, तो शायद मैं मुझे क्या करना है कोशिश कर रहा हूँ पर स्पष्ट नहीं था।

मैं वस्तुओं के संग्रह को सरणी में सहेज रहा हूं, प्रत्येक ऑब्जेक्ट में arrival है जो दूसरे चरण पर परिभाषित किया जाएगा।

तो सबसे पहले मैं इस तरह की वस्तुओं की एक सरणी बनाएँ:

[ 
{ 
    "date":"2014 10 16", 
    "time":"20.42", 
    "car":"396", 
    "driver":"Seb", 
    "from":"A", 
    "destination":"B", 
    "pax":"3", 
}, 
{ 
    "date":"2014 10 16", 
    "time":"20.12", 
    "car":"319", 
    "driver":"Seb", 
    "from":"C", 
    "destination":"D", 
    "pax":"4", 
}, 
{ 
    "date":"2014 10 16", 
    "time":"20.22", 
    "car":"396", 
    "driver":"Seb", 
    "from":"G", 
    "destination":"A", 
    "pax":"1", 
} 
] 

इस तालिका जैसी लेआउट में दृश्य पर प्रदर्शित होता है। प्रत्येक पंक्ति में किसी ऑब्जेक्ट से डेटा होता है, और प्रारंभ में संपत्ति arrival शामिल नहीं होती है क्योंकि ऐप कार की गति को ट्रैक करता है और कार गंतव्य तक नहीं पहुंच पाई है।

प्रत्येक पंक्ति में insertRecord() ट्रिगर करने वाला एक बटन भी होता है, जो आने वाले समय को परिभाषित करता है और इसे arrival संपत्ति को स्वतंत्र रूप से प्रत्येक ऑब्जेक्ट में शामिल करना होता है।

इस उदाहरण में

तो, शायद दूसरी वस्तु से कार आ गया, और मैं केवल इस विशेष वस्तु के लिए arrival प्रॉपर्टी जोड़ते हैं, इस तरह सरणी छोड़ने करने में सक्षम होना चाहता हूँ:

[ 
{ 
    "date":"2014 10 16", 
    "time":"20.42", 
    "car":"396", 
    "driver":"Seb", 
    "from":"A", 
    "destination":"B", 
    "pax":"3" 
}, 
{ 
    "date":"2014 10 16", 
    "time":"20.12", 
    "car":"319", 
    "driver":"Seb", 
    "from":"C", 
    "destination":"D", 
    "pax":"4", 
    "arrival":"20.35" 
}, 
{ 
    "date":"2014 10 16", 
    "time":"20.22", 
    "car":"396", 
    "driver":"Seb", 
    "from":"G", 
    "destination":"A", 
    "pax":"1" 
} 
] 

Dfsq से 2 प्रस्तावित समाधानों ने मुझे सरणी के पहले ऑब्जेक्ट, या सभी ऑब्जेक्ट्स के लिए एक बार में आगमन को परिभाषित करने की अनुमति दी, लेकिन प्रत्येक ऑब्जेक्ट के लिए अलग से नहीं।

<div class="row msf-row" ng-repeat="record in recordlist | filter: search"> 
     <div class="col-md-1">{{record.time}}</div> 
     <div class="col-md-1"><strong>{{record.car}}</strong></div> 
     <div class="col-md-1">{{record.driver}}</div> 
     <div class="col-md-3">{{record.from}}</div> 
     <div class="col-md-3">{{record.destination}}</div> 
     <div class="col-md-1">{{record.pax}}</div> 
     <div class="col-md-1"> 
      <button ng-click="insertRecord()" ng-show="!record.arrival"><i class="fa fa-cog"></i></button>{{record.arrival}} 
     </div> 
</div> 

इतना होने के नाते, पर किसी भी संकेत कैसे वहाँ पाने के:

यह एचटीएमएल कोड जहां insertData कहा जाता है?

+0

"प्रत्येक पंक्ति भी) एक बटन insertRecord (ट्रिगर है" - तो क्यों आप उत्तीर्ण नहीं होते हैं उस पंक्ति से ऑब्जेक्ट 'insertRecord' तक? – zeroflagL

+0

क्या आप इसे विस्तारित करने में विस्तारित कर सकते हैं? धन्यवाद!! –

+0

आपको HTML के उस भाग को दिखाने की आवश्यकता होगी, वह हिस्सा जहां 'insertRecord' कहा जाता है। – zeroflagL

उत्तर

8

अपने प्रश्न समझ में सही ढंग से आप जोड़कर एकल रिकॉर्ड अपडेट करना चाहते हैं arrivalinsertRecord को रिकॉर्ड दर्रा:

<button ng-click="insertRecord(record)" ng-show="!record.arrival"> 

वहाँ आप संबंधित रिकार्ड करने के लिए संपत्ति जोड़ सकते हैं:

$scope.insertRecord = function (record) { 
    record.arrival = moment().format("HH.mm"); 
+0

तो बहुत आसान सरल:) –

12

आपके कोड $scope.recordlist के अनुसार वस्तुओं की एक श्रृंखला है।तो आप शायद यह चाहते हैं:

angular.extend($scope.recordlist[0], arrival); 

युपीडी सरणी में हर वस्तु को अद्यतन करने के लिए आप map विधि का उपयोग कर सकते हैं:

$scope.recordlist = $scope.recordlist.map(function(obj) { 
    return angular.extend(obj, arrival); 
}); 
+0

यह काम करता है! समस्या यह है कि यह हमेशा एक ही ऑब्जेक्ट (पहला) अपडेट करेगा, और मैं ऑब्जेक्ट द्वारा "आगमन" प्रॉपर्टी ऑब्जेक्ट को अपडेट करने में सक्षम होना चाहता हूं। तुम क्या सोचते हो? –

+0

मतलब यह है कि पहला फ़ंक्शन ऑब्जेक्ट्स की एक सरणी बनाएगा, और मैं प्रत्येक ऑब्जेक्ट में आगमन संपत्ति को स्वतंत्र रूप से सम्मिलित करने में सक्षम होना चाहता हूं। –

+0

अद्यतन उत्तर देखें। – dfsq