2014-10-16 15 views
8

Ho una matrice esistente con un oggetto e diverse proprietà create in un primo passaggio. Si è creato dalla seguente funzione:Aggiunta di proprietà a ciascun oggetto di una matrice indipendentemente con 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); 
}; 

Essa si traduce nella seguente array:

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

Quello che sto cercando di fare è aggiungere un'altra proprietà in oggetto esistente sul prossimo passo con ng clic. Ho provato con la seguente funzione ma non sembra funzionare.

$scope.insertRecord = function (recordlist) { 

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


    jsonToRecordLocalStorage($scope.recordlist); 
} 

Il risultato finale che sto cercando è la seguente:

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

Forse un'altra cosa da prendere anche in considerazione è che in app esiste la possibilità di avere molti oggetti differenti essere elencati , alcuni con la proprietà arrival già definita, ma alcuni la avranno in futuro.

Eventuali suggerimenti?

EDIT

Le 2 soluzioni sono stato lavorato ma non realizzare ciò che sto cercando, quindi probabilmente mi era chiaro su quello che sto cercando di fare.

Sto salvando una raccolta di oggetti in una matrice, ogni oggetto ha una proprietà arrival che verrà definita in una seconda fase.

Quindi, prima ho creare un array di oggetti come questo:

[ 
{ 
    "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", 
} 
] 

Questo viene visualizzato sulla vista in un layout di tabella-like. Ogni riga contiene i dati di un oggetto e inizialmente non include la proprietà arrival perché l'app tiene traccia dei movimenti dell'automobile e l'auto non è arrivata a destinazione.

Ogni riga ha anche un pulsante di attivazione insertRecord(), che definisce l'orario di arrivo e dovrebbe includere la proprietà arrival in ciascun oggetto, indipendentemente.

Quindi, in questo esempio, forse l'auto dal secondo oggetto è arrivato, e voglio essere in grado di aggiungere la proprietà arrival solo per questo particolare oggetto, lasciando l'array come questo:

[ 
{ 
    "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" 
} 
] 

Le 2 soluzioni proposte da dfsq mi hanno permesso di definire sia l'arrivo per il primo oggetto dell'array, sia per tutti gli oggetti contemporaneamente, ma non per ciascun oggetto separatamente.

Questo è il codice HTML in cui insertData si chiama:

<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> 

Essendo così, eventuali suggerimenti su come arrivare?

+0

"Ogni riga ha anche un pulsante di attivazione InsertRecord()" - allora perché non si passa l'oggetto da quella riga a 'insertRecord'? – zeroflagL

+0

Potresti approfondire come farlo? Grazie!! –

+0

Dovresti mostrare quella parte dell'HTML, la parte in cui viene chiamato 'insertRecord'. – zeroflagL

risposta

8

Se capire la sua domanda che si desidera aggiornare un singolo record con l'aggiunta di arrival. Passare il record a insertRecord:

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

Ci si può aggiungere la proprietà al rispettivo record di:

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

Così dannatamente semplice:) –

12

In base al codice $scope.recordlist è una matrice di oggetti.Quindi probabilmente si desidera che questo:

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

UPD Per aggiornare ogni oggetto nella matrice è possibile utilizzare map metodo:

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

Questo funziona! Il problema è che aggiornerà sempre lo stesso oggetto (il primo) e voglio essere in grado di aggiornare l'oggetto proprietà "arrivo" per oggetto. Cosa ne pensi? –

+0

Significa che la prima funzione creerà una matrice di oggetti e voglio essere in grado di inserire la proprietà di arrivo in ogni oggetto in modo indipendente. –

+0

Vedere la risposta aggiornata. – dfsq

Problemi correlati