我试图弄清楚如何$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
有没有人在他们自己的项目中做过类似的事情?