@@ -16,8 +16,9 @@ angular.module('ui.bootstrap.timepicker', [])
16
16
17
17
. controller ( 'UibTimepickerController' , [ '$scope' , '$element' , '$attrs' , '$parse' , '$log' , '$locale' , 'uibTimepickerConfig' , function ( $scope , $element , $attrs , $parse , $log , $locale , timepickerConfig ) {
18
18
var selected = new Date ( ) ,
19
- ngModelCtrl = { $setViewValue : angular . noop } , // nullModelCtrl
20
- meridians = angular . isDefined ( $attrs . meridians ) ? $scope . $parent . $eval ( $attrs . meridians ) : timepickerConfig . meridians || $locale . DATETIME_FORMATS . AMPMS ;
19
+ watchers = [ ] ,
20
+ ngModelCtrl = { $setViewValue : angular . noop } , // nullModelCtrl
21
+ meridians = angular . isDefined ( $attrs . meridians ) ? $scope . $parent . $eval ( $attrs . meridians ) : timepickerConfig . meridians || $locale . DATETIME_FORMATS . AMPMS ;
21
22
22
23
$scope . tabindex = angular . isDefined ( $attrs . tabindex ) ? $attrs . tabindex : 0 ;
23
24
$element . removeAttr ( 'tabindex' ) ;
@@ -51,35 +52,35 @@ angular.module('ui.bootstrap.timepicker', [])
51
52
52
53
var hourStep = timepickerConfig . hourStep ;
53
54
if ( $attrs . hourStep ) {
54
- $scope . $parent . $watch ( $parse ( $attrs . hourStep ) , function ( value ) {
55
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . hourStep ) , function ( value ) {
55
56
hourStep = + value ;
56
- } ) ;
57
+ } ) ) ;
57
58
}
58
59
59
60
var minuteStep = timepickerConfig . minuteStep ;
60
61
if ( $attrs . minuteStep ) {
61
- $scope . $parent . $watch ( $parse ( $attrs . minuteStep ) , function ( value ) {
62
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . minuteStep ) , function ( value ) {
62
63
minuteStep = + value ;
63
- } ) ;
64
+ } ) ) ;
64
65
}
65
66
66
67
var min ;
67
- $scope . $parent . $watch ( $parse ( $attrs . min ) , function ( value ) {
68
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . min ) , function ( value ) {
68
69
var dt = new Date ( value ) ;
69
70
min = isNaN ( dt ) ? undefined : dt ;
70
- } ) ;
71
+ } ) ) ;
71
72
72
73
var max ;
73
- $scope . $parent . $watch ( $parse ( $attrs . max ) , function ( value ) {
74
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . max ) , function ( value ) {
74
75
var dt = new Date ( value ) ;
75
76
max = isNaN ( dt ) ? undefined : dt ;
76
- } ) ;
77
+ } ) ) ;
77
78
78
79
var disabled = false ;
79
80
if ( $attrs . ngDisabled ) {
80
- $scope . $parent . $watch ( $parse ( $attrs . ngDisabled ) , function ( value ) {
81
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . ngDisabled ) , function ( value ) {
81
82
disabled = value ;
82
- } ) ;
83
+ } ) ) ;
83
84
}
84
85
85
86
$scope . noIncrementHours = function ( ) {
@@ -128,22 +129,22 @@ angular.module('ui.bootstrap.timepicker', [])
128
129
129
130
var secondStep = timepickerConfig . secondStep ;
130
131
if ( $attrs . secondStep ) {
131
- $scope . $parent . $watch ( $parse ( $attrs . secondStep ) , function ( value ) {
132
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . secondStep ) , function ( value ) {
132
133
secondStep = + value ;
133
- } ) ;
134
+ } ) ) ;
134
135
}
135
136
136
137
$scope . showSeconds = timepickerConfig . showSeconds ;
137
138
if ( $attrs . showSeconds ) {
138
- $scope . $parent . $watch ( $parse ( $attrs . showSeconds ) , function ( value ) {
139
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . showSeconds ) , function ( value ) {
139
140
$scope . showSeconds = ! ! value ;
140
- } ) ;
141
+ } ) ) ;
141
142
}
142
143
143
144
// 12H / 24H mode
144
145
$scope . showMeridian = timepickerConfig . showMeridian ;
145
146
if ( $attrs . showMeridian ) {
146
- $scope . $parent . $watch ( $parse ( $attrs . showMeridian ) , function ( value ) {
147
+ watchers . push ( $scope . $parent . $watch ( $parse ( $attrs . showMeridian ) , function ( value ) {
147
148
$scope . showMeridian = ! ! value ;
148
149
149
150
if ( ngModelCtrl . $error . time ) {
@@ -156,7 +157,7 @@ angular.module('ui.bootstrap.timepicker', [])
156
157
} else {
157
158
updateTemplate ( ) ;
158
159
}
159
- } ) ;
160
+ } ) ) ;
160
161
}
161
162
162
163
// Get $scope.hours in 24H mode if valid
@@ -518,6 +519,12 @@ angular.module('ui.bootstrap.timepicker', [])
518
519
$scope . blur = function ( ) {
519
520
ngModelCtrl . $setTouched ( ) ;
520
521
} ;
522
+
523
+ $scope . $on ( '$destroy' , function ( ) {
524
+ while ( watchers . length ) {
525
+ watchers . shift ( ) ( ) ;
526
+ }
527
+ } ) ;
521
528
} ] )
522
529
523
530
. directive ( 'uibTimepicker' , [ 'uibTimepickerConfig' , function ( uibTimepickerConfig ) {
0 commit comments