2014-10-16 10 views
8

Mam istniejącą tablicę z obiektem i kilkoma właściwościami utworzonymi w pierwszym kroku. Jest ona tworzona przez następującą funkcję:Dodawanie właściwości do każdego obiektu tablicy niezależnie od AngularJS angleular.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); 
}; 

Wynika to w następującym szeregu:

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

Co staram się zrobić to dodać inną nieruchomość do istniejącego obiektu na następnym etapie ng-click. Próbowałem z następującą funkcją, ale nie wydaje się działać.

$scope.insertRecord = function (recordlist) { 

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


    jsonToRecordLocalStorage($scope.recordlist); 
} 

Efektem końcowym szukam jest następujący:

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

Może inna sprawa wziąć również pod uwagę to, że w aplikacji istnieje możliwość posiadania wielu różnych obiektów są wymienione , niektóre mają już zdefiniowaną właściwość arrival, ale niektóre mają ją później.

Jakieś wskazówki?

EDIT

W 2 rozwiązania mam pracowali, ale nie osiągnąć to, co szukam, więc prawdopodobnie było jasne, ja na to, co próbuję zrobić.

Zapisuję kolekcję obiektów w tablicy, każdy obiekt ma właściwość arrival, która zostanie zdefiniowana w drugim kroku.

Więc najpierw utworzyć tablicę obiektów tak:

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

ta jest wyświetlana na widoku w układzie tabeli podobny. Każdy wiersz zawiera dane z obiektu i początkowo nie zawiera właściwości arrival, ponieważ aplikacja śledzi ruchy samochodu, a samochód nie dotarł do miejsca docelowego.

Każdy wiersz ma również przycisk uruchamiający insertRecord(), który definiuje czas przybycia i jego ma zawierać właściwość arrival do każdego obiektu, niezależnie.

Tak więc w tym przykładzie, może samochód od drugiego obiektu przybył, i chcę, aby móc dodać właściwość arrival tylko dla tego konkretnego obiektu, pozostawiając tablicę takiego:

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

2 proponowane rozwiązania z dfsq pozwoliły mi zarówno zdefiniować przybycie dla pierwszego obiektu tablicy, jak i dla wszystkich obiektów jednocześnie, ale nie dla każdego obiektu osobno.

Jest to kod HTML gdzie insertData nazywa się:

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

Będąc więc wszelkie wskazówki na temat jak się tam dostać?

+0

„Każdy rząd ma także przycisk wyzwalania insertRecord()” - to dlaczego nie można przejść obiekt z tego wiersza do 'insertRecord'? – zeroflagL

+0

Czy mógłbyś wyjaśnić, jak to zrobić? Dzięki!! –

+0

Musisz pokazać tę część kodu HTML, czyli część, w której wywołano 'insertRecord'. – zeroflagL

Odpowiedz

8

Jeśli rozumiem pytanie chcesz zaktualizować pojedynczy rekord, dodając arrival. Przepuścić rekord insertRecord:

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

Nie można dodać obiekt do odpowiedniego rekordu:

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

Tak cholernie proste:) –

12

Zgodnie z kodem $scope.recordlist jest tablicą obiektów.Więc prawdopodobnie chcesz to:

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

UPD Aby zaktualizować każdy obiekt w tablicy można użyć map metody:

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

To działa! Problem polega na tym, że zawsze będzie aktualizował ten sam obiekt (pierwszy) i chcę móc zaktualizować obiekt właściwości "przyjazd" według obiektu. Co myślisz? –

+0

Oznacza to, że pierwsza funkcja tworzy tablicę obiektów, a ja chcę mieć możliwość wstawiania właściwości nadejścia w każdym obiekcie niezależnie. –

+0

Zobacz zaktualizowaną odpowiedź. – dfsq