2016-12-28 3 views
0

У меня проблема с модификацией вложенного свойства. Как просмотреть эти вложенные свойства в массиве task.history? Или как изменить $ scope. $ Watch?AngularJS 1.x update вложенное свойство

Вот плункер. Нажмите keyboard_arrow_up значок. http://plnkr.co/edit/ZCIU5gNwWfWdIOnz0ykb

<body ng-controller="EditController as ec"> 
    <!-- task history --> 


    <table> 
     <thead> 
      <tr> 
       <th>Date</th> 
       <th>From</th> 
       <th>To</th> 
       <th>Time</th> 

      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="item in ec.task.history"> 
       <td>{{ item.startTime | date:'yyyy-MM-dd'}}</td> 
       <td> 
        <div> 
         <div> 
          <i class="material-icons" ng-click="ec.addHour(item.startTime)">keyboard_arrow_up</i> 
          <p style="margin: 0px 0px 0px 0px">{{ item.startTime | date:'HH'}}</p> 
          <i class="material-icons" ng-click="ec.substractHour()">keyboard_arrow_down</i> 
         </div> 

         <div> 
          <p style="margin: 0px 0px 0px 0px">:</p> 
         </div> 

         <div> 
          <i class="material-icons">keyboard_arrow_up</i> 
          <p style="margin: 0px 0px 0px 0px">{{ item.startTime | date:'mm'}}</p> 
          <i class="material-icons">keyboard_arrow_down</i> 
         </div> 

        </div> 
       </td> 

       <td>{{ item.stopTime | date:'HH:mm:ss '}}</td> 
       <td>{{ item.dt | formatDuration }}</td> 

      </tr> 
     </tbody> 
    </table> 

функции EditController ...

function addHour(timestamp) { 
    console.log(timestamp); 
    var tmp = new Date(timestamp); 
    tmp.setHours(tmp.getHours() + 1); 
    timestamp = tmp.toISOString(); 
} 
$scope.$watch(angular.bind(self.task.history, function() { 
    return self.task.history; 
}), function(oldVal, newVal) { 
    console.log(oldVal); 
    console.log(newVal); 
}, true); 
+0

что такое 'task.history'? –

+0

Arrayy таких объектов, как: {"startTime": "2016-12-22T13: 18: 36.062Z", "stopTime": "2016-12-22T13: 19: 42.100Z", "_ id": "585bd2ee9f2fee2f28e2551f", " dt ": 66.038}, – miuosh

+0

, где вы это заявили? –

ответ

0

Попробуйте это.

$scope.$watch(angular.bind(self, function() { 
    return self.task.history; 
}), function(newVal) { 
    console.log(newVal); 
}); 
0

$ watch или $ watchCollection не работает. Я изменил функцию addHour и передал объект item и параметр property (как строка). Теперь мне не нужно использовать $ watch или $ watchCollection.

function addHour(timestamp, property) { 
      console.log(timestamp[property]); 
      var tmp = new Date(timestamp[property]); 
      tmp.setHours(tmp.getHours() + 1); 
      timestamp[property] = tmp.toISOString(); 
      console.log(timestamp)   
     } 

Я использую

ng-click="ec.addHour(item, 'startTime')" 

вместо

ng-click="ec.addHour(item.startTime)" 
Смежные вопросы