This repository was archived by the owner on May 29, 2019. It is now read-only.
File tree 3 files changed +40
-4
lines changed
3 files changed +40
-4
lines changed Original file line number Diff line number Diff line change 14
14
15
15
<!-- Single button -->
16
16
< div class ="btn-group " dropdown is-open ="status.isopen ">
17
- < button type ="button " class ="btn btn-primary dropdown-toggle ">
17
+ < button type ="button " class ="btn btn-primary dropdown-toggle " ng-disabled =" disabled " >
18
18
Button dropdown < span class ="caret "> </ span >
19
19
</ button >
20
20
< ul class ="dropdown-menu " role ="menu ">
45
45
< hr />
46
46
< p >
47
47
< button type ="button " class ="btn btn-default btn-sm " ng-click ="toggleDropdown($event) "> Toggle button dropdown</ button >
48
+ < button type ="button " class ="btn btn-warning btn-sm " ng-click ="disabled = !disabled "> Enable/Disable</ button >
48
49
</ p >
49
50
50
51
</ div >
Original file line number Diff line number Diff line change @@ -112,22 +112,28 @@ angular.module('ui.bootstrap.dropdown', [])
112
112
return ;
113
113
}
114
114
115
- element . bind ( 'click' , function ( event ) {
115
+ var toggleDropdown = function ( event ) {
116
116
event . preventDefault ( ) ;
117
117
event . stopPropagation ( ) ;
118
118
119
- if ( ! element . hasClass ( 'disabled' ) && ! element . prop ( ' disabled' ) ) {
119
+ if ( ! element . hasClass ( 'disabled' ) && ! attrs . disabled ) {
120
120
scope . $apply ( function ( ) {
121
121
dropdownCtrl . toggle ( ) ;
122
122
} ) ;
123
123
}
124
- } ) ;
124
+ } ;
125
+
126
+ element . bind ( 'click' , toggleDropdown ) ;
125
127
126
128
// WAI-ARIA
127
129
element . attr ( { 'aria-haspopup' : true , 'aria-expanded' : false } ) ;
128
130
scope . $watch ( dropdownCtrl . isOpen , function ( isOpen ) {
129
131
element . attr ( 'aria-expanded' , ! ! isOpen ) ;
130
132
} ) ;
133
+
134
+ scope . $on ( '$destroy' , function ( ) {
135
+ element . unbind ( 'click' , toggleDropdown ) ;
136
+ } ) ;
131
137
}
132
138
} ;
133
139
} ) ;
Original file line number Diff line number Diff line change @@ -91,6 +91,35 @@ describe('dropdownToggle', function() {
91
91
expect ( elm . hasClass ( 'open' ) ) . toBe ( false ) ;
92
92
} ) ;
93
93
94
+ it ( 'should not toggle if the element has `ng-disabled` as true' , function ( ) {
95
+ $rootScope . isdisabled = true ;
96
+ var elm = $compile ( '<li class="dropdown"><div ng-disabled="isdisabled" dropdown-toggle></div><ul><li>Hello</li></ul></li>' ) ( $rootScope ) ;
97
+ $rootScope . $digest ( ) ;
98
+ elm . find ( 'div' ) . click ( ) ;
99
+ expect ( elm . hasClass ( 'open' ) ) . toBe ( false ) ;
100
+
101
+ $rootScope . isdisabled = false ;
102
+ $rootScope . $digest ( ) ;
103
+ elm . find ( 'div' ) . click ( ) ;
104
+ expect ( elm . hasClass ( 'open' ) ) . toBe ( true ) ;
105
+ } ) ;
106
+
107
+ it ( 'should unbind events on scope destroy' , function ( ) {
108
+ var $scope = $rootScope . $new ( ) ;
109
+ var elm = $compile ( '<li class="dropdown"><button ng-disabled="isdisabled" dropdown-toggle></button><ul><li>Hello</li></ul></li>' ) ( $scope ) ;
110
+ $scope . $digest ( ) ;
111
+
112
+ var buttonEl = elm . find ( 'button' ) ;
113
+ buttonEl . click ( ) ;
114
+ expect ( elm . hasClass ( 'open' ) ) . toBe ( true ) ;
115
+ buttonEl . click ( ) ;
116
+ expect ( elm . hasClass ( 'open' ) ) . toBe ( false ) ;
117
+
118
+ $scope . $destroy ( ) ;
119
+ buttonEl . click ( ) ;
120
+ expect ( elm . hasClass ( 'open' ) ) . toBe ( false ) ;
121
+ } ) ;
122
+
94
123
// issue 270
95
124
it ( 'executes other document click events normally' , function ( ) {
96
125
var checkboxEl = $compile ( '<input type="checkbox" ng-click="clicked = true" />' ) ( $rootScope ) ;
You can’t perform that action at this time.
0 commit comments