Я пытаюсь выяснить, как установить $scope.$watch
для каждого элемента массива. Меня интересуют только определенные атрибуты каждого элемента.
В моем примере каждый объект rental_date
имеет три атрибута: date
, start_time
и stop_time
. Всякий раз, когда start_time
изменяется, я хочу, чтобы stop_time
был установлен на 2 часа после start_time
.
Вызов $ngResource
(с использованием Angular 1.1.5):
Agreement.show(
id: 5
).$then ((success) ->
$scope.agreement = success.data.agreement
# returns an array of rental dates
$scope.rental_dates = success.data.rental_dates
# $watch goes here
Вот четыре варианта функции $watch
, которые я пробовал:
1
angular.forEach $scope.rental_dates, (date, pos) ->
$scope.$watch date.start_time, ((newval, oldval) ->
$log.info 'watch changed'
$log.info newval
$log.info oldval
), true
2
angular.forEach $scope.rental_dates, (date, pos) ->
$scope.$watch $scope.rental_dates[pos].start_time, ((newval, oldval) ->
$log.info 'watch changed'
$log.info newval
$log.info oldval
), true
3
angular.forEach $scope.rental_dates, (date, pos) ->
$scope.$watch 'rental_dates[pos].start_time', ((newval, oldval) ->
# also tried '$scope.rental_dates[pos].start_time'
$log.info 'watch changed'
$log.info newval
$log.info oldval
), true
4
Это работает, но на данный момент я не могу придумать элегантное решение для доступа только к значениям, которые меня интересуют $watch
ing, а не всему массиву.
$scope.$watch 'rental_dates', ((newval, oldval) ->
$log.info 'watch changed'
$log.info newval
$log.info oldval
), true
Кто-нибудь сделал что-то подобное в своих проектах?