AngularJS 1.X обновить вложенное свойство

У меня проблема с модификацией вложенного свойства. Как просмотреть эти вложенные свойства в задаче.массив истории? Или как изменить $scope.$ watch?

Вот планкер. Щелкните значок 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);

3 ответа

  1. Попробовать это.

    $scope.$watch(angular.bind(self, function() {
        return self.task.history;
    }), function(newVal) {
        console.log(newVal);
    });
    
  2. $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)"