$scope.$watch
配列内の各要素にa を設定する方法を理解しようとしています。各要素の特定の属性のみを気にします。
この例では、各オブジェクトに、、およびのrental_date
3 つの属性があります。を変更するたびに、を の2 時間後に設定したいと考えています。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
私が試した機能の4つのバリエーションは次のとおりです。
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
自分のプロジェクトで似たようなことをした人はいますか?