angularjs - Setting $scope.$watch on each element in an array -
i trying figure out how set $scope.$watch
on each element in array. care attributes of each element.
in example, each rental_date
object has 3 attributes: date
, start_time
, , stop_time
. whenever start_time
changed, want stop_time
set 2 hours after start_time
.
the $ngresource
call (using angular 1.1.5):
agreement.show( id: 5 ).$then ((success) -> $scope.agreement = success.data.agreement # returns array of rental dates $scope.rental_dates = success.data.rental_dates # $watch goes here
here 4 variations of $watch
function tried:
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) -> # tried '$scope.rental_dates[pos].start_time' $log.info 'watch changed' $log.info newval $log.info oldval ), true
4:
this work, but, @ moment, can't think of elegant solution access values care $watch
ing instead of whole array.
$scope.$watch 'rental_dates', ((newval, oldval) -> $log.info 'watch changed' $log.info newval $log.info oldval ), true
has done similar in own projects?
i assuming you're somehow using ng-repeat generate ui elements each entry of array? assign ng-controller each of these ui elements. controller instantiated each array element. inside controller, use $watch.
<div ng-repeat="rentaldate in rental_dates" ng-controller="rentaldatecontroller"> </div>
and in controller code:
angular.module(...).controller('rentaldatecontroller', function ($scope) { $scope.$watch('rentaldate.start_time', function (starttime) { ... }); });
here little example: http://plnkr.co/edit/lhj3mbulmahzdehcxvem?p=preview
Comments
Post a Comment