2014-10-16 8 views
8

첫 번째 단계에서 생성 된 객체 및 여러 속성이있는 기존 배열이 있습니다. 그것은 다음과 같은 기능에 의해 생성됩니다AngularJS angle.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을 갖습니다.

그래서 제 I는 다음과 같이 오브젝트의 배열을 생성 :

[ 
{ 
    "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을 포함하지 않습니다.

각 행에는 도착 시간과 각 개체에 arrival 속성을 독립적으로 포함시켜야한다고 정의하는 insertRecord() 버튼이 있습니다. 이 예에서는 그래서

는, 어쩌면 두 번째 객체의 차량이 도착하고,이 같은 배열 떠나는 만이 특정 객체의 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가 호출되는 HTML 코드?

+0

"각 행은 또한 insertRecord을 (트리거 버튼)가"- 그럼 왜 당신이 통과하지 해당 행의 객체를'insertRecord'에? – zeroflagL

+0

그 방법을 자세히 설명해 주시겠습니까? 감사!! –

+0

'insertRecord'가 호출되는 HTML의 일부분을 보여줘야합니다. – zeroflagL

답변

8

: 당신이 map 방법을 사용할 수 있습니다 배열의 모든 개체를 업데이트 할 수

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

UPD : 그래서 당신은 아마이 원하는 arrival. insertRecord에 기록을 전달합니다

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

당신은 각각의 기록에 속성을 추가 할 수 있습니다

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

그래서 간단 해. :) –

12

코드에 따르면 $scope.recordlist은 개체의 배열입니다.당신은 추가하여 하나의 레코드를 업데이트 할 정확하게 질문을 이해한다면

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

이 작품! 문제는 항상 동일한 객체 (첫 번째 객체)를 업데이트하고 객체에 의한 "도착"속성 객체를 업데이트 할 수 있기를 원합니다. 어떻게 생각해? –

+0

첫 번째 함수가 객체의 배열을 만들고 각 객체에 도착 속성을 독립적으로 삽입 할 수 있기를 바랍니다. –

+0

업데이트 된 답변보기 – dfsq

관련 문제