@@ -546,25 +546,24 @@ angularInputType('checkbox', function(inputElement) {
546
546
</doc:example>
547
547
*/
548
548
angularInputType ( 'radio' , function ( inputElement ) {
549
- var widget = this ,
550
- value = inputElement . attr ( 'value' ) ;
549
+ var widget = this ;
551
550
552
551
//correct the name
553
552
inputElement . attr ( 'name' , widget . $id + '@' + inputElement . attr ( 'name' ) ) ;
554
553
inputElement . bind ( 'click' , function ( ) {
555
554
widget . $apply ( function ( ) {
556
555
if ( inputElement [ 0 ] . checked ) {
557
- widget . $emit ( '$viewChange' , value ) ;
556
+ widget . $emit ( '$viewChange' , widget . $ value) ;
558
557
}
559
558
} ) ;
560
559
} ) ;
561
560
562
561
widget . $render = function ( ) {
563
- inputElement [ 0 ] . checked = value == widget . $viewValue ;
562
+ inputElement [ 0 ] . checked = isDefined ( widget . $ value) && ( widget . $value == widget . $viewValue ) ;
564
563
} ;
565
564
566
565
if ( inputElement [ 0 ] . checked ) {
567
- widget . $viewValue = value ;
566
+ widget . $viewValue = widget . $ value;
568
567
}
569
568
} ) ;
570
569
@@ -735,15 +734,15 @@ angularWidget('input', function(inputElement){
735
734
pattern = new RegExp ( pattern . substr ( 1 , pattern . length - 2 ) ) ;
736
735
patternMatch = function ( value ) {
737
736
return pattern . test ( value ) ;
738
- }
737
+ } ;
739
738
} else {
740
739
patternMatch = function ( value ) {
741
740
var patternObj = modelScope . $eval ( pattern ) ;
742
741
if ( ! patternObj || ! patternObj . test ) {
743
742
throw new Error ( 'Expected ' + pattern + ' to be a RegExp but was ' + patternObj ) ;
744
743
}
745
744
return patternObj . test ( value ) ;
746
- }
745
+ } ;
747
746
}
748
747
}
749
748
@@ -771,6 +770,7 @@ angularWidget('input', function(inputElement){
771
770
controller : TypeController ,
772
771
controllerArgs : [ inputElement ] } ) ;
773
772
773
+ watchElementProperty ( this , widget , 'value' , inputElement ) ;
774
774
watchElementProperty ( this , widget , 'required' , inputElement ) ;
775
775
watchElementProperty ( this , widget , 'readonly' , inputElement ) ;
776
776
watchElementProperty ( this , widget , 'disabled' , inputElement ) ;
@@ -864,15 +864,17 @@ angularWidget('textarea', angularWidget('input'));
864
864
865
865
function watchElementProperty ( modelScope , widget , name , element ) {
866
866
var bindAttr = fromJson ( element . attr ( 'ng:bind-attr' ) || '{}' ) ,
867
- match = / \s * { { ( .* ) } } \s * / . exec ( bindAttr [ name ] ) ;
868
- widget [ '$' + name ] =
869
- // some browsers return true some '' when required is set without value.
870
- isString ( element . prop ( name ) ) || ! ! element . prop ( name ) ||
871
- // this is needed for ie9, since it will treat boolean attributes as false
872
- ! ! element [ 0 ] . attributes [ name ] ;
867
+ match = / \s * { { ( .* ) } } \s * / . exec ( bindAttr [ name ] ) ,
868
+ isBoolean = BOOLEAN_ATTR [ name ] ;
869
+ widget [ '$' + name ] = isBoolean
870
+ ? ( // some browsers return true some '' when required is set without value.
871
+ isString ( element . prop ( name ) ) || ! ! element . prop ( name ) ||
872
+ // this is needed for ie9, since it will treat boolean attributes as false
873
+ ! ! element [ 0 ] . attributes [ name ] )
874
+ : element . attr ( name ) ;
873
875
if ( bindAttr [ name ] && match ) {
874
876
modelScope . $watch ( match [ 1 ] , function ( scope , value ) {
875
- widget [ '$' + name ] = ! ! value ;
877
+ widget [ '$' + name ] = isBoolean ? ! ! value : value ;
876
878
widget . $emit ( '$validate' ) ;
877
879
} ) ;
878
880
}
0 commit comments