我试图弄清楚如何$scope.$watch在数组中的每个元素上设置 a 。我只关心每个元素的某些属性。
在我的示例中,每个rental_date对象都具有三个属性:date、start_time和stop_time。每当start_time更改时,我希望stop_time将 设置为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而不是整个数组。
$scope.$watch 'rental_dates', ((newval, oldval) ->
$log.info 'watch changed'
$log.info newval
$log.info oldval
), true
有没有人在他们自己的项目中做过类似的事情?