@@ -68,22 +68,28 @@ var ngSwitchDirective = valueFn({
68
68
} ,
69
69
link : function ( scope , element , attr , ctrl ) {
70
70
var watchExpr = attr . ngSwitch || attr . on ,
71
- selectedTransclude ,
72
- selectedElement ,
73
- selectedScope ;
71
+ selectedTranscludes ,
72
+ selectedElements ,
73
+ selectedScopes ;
74
74
75
75
scope . $watch ( watchExpr , function ngSwitchWatchAction ( value ) {
76
- if ( selectedElement ) {
76
+ angular . forEach ( selectedScopes , function ( selectedScope ) {
77
77
selectedScope . $destroy ( ) ;
78
+ } ) ;
79
+ angular . forEach ( selectedElements , function ( selectedElement ) {
78
80
selectedElement . remove ( ) ;
79
- selectedElement = selectedScope = null ;
80
- }
81
- if ( ( selectedTransclude = ctrl . cases [ '!' + value ] || ctrl . cases [ '?' ] ) ) {
81
+ } ) ;
82
+ selectedElements = [ ] ;
83
+ selectedScopes = [ ] ;
84
+ if ( ( selectedTranscludes = ctrl . cases [ '!' + value ] || ctrl . cases [ '?' ] ) ) {
82
85
scope . $eval ( attr . change ) ;
83
- selectedScope = scope . $new ( ) ;
84
- selectedTransclude ( selectedScope , function ( caseElement ) {
85
- selectedElement = caseElement ;
86
- element . append ( caseElement ) ;
86
+ angular . forEach ( selectedTranscludes , function ( selectedTransclude ) {
87
+ var selectedScope = scope . $new ( ) ;
88
+ selectedScopes . push ( selectedScope ) ;
89
+ selectedTransclude ( selectedScope , function ( caseElement ) {
90
+ selectedElements . push ( caseElement ) ;
91
+ element . append ( caseElement ) ;
92
+ } ) ;
87
93
} ) ;
88
94
}
89
95
} ) ;
@@ -96,7 +102,8 @@ var ngSwitchWhenDirective = ngDirective({
96
102
require : '^ngSwitch' ,
97
103
compile : function ( element , attrs , transclude ) {
98
104
return function ( scope , element , attr , ctrl ) {
99
- ctrl . cases [ '!' + attrs . ngSwitchWhen ] = transclude ;
105
+ ctrl . cases [ '!' + attrs . ngSwitchWhen ] = ( ctrl . cases [ '!' + attrs . ngSwitchWhen ] || [ ] ) ;
106
+ ctrl . cases [ '!' + attrs . ngSwitchWhen ] . push ( transclude ) ;
100
107
} ;
101
108
}
102
109
} ) ;
@@ -107,7 +114,8 @@ var ngSwitchDefaultDirective = ngDirective({
107
114
require : '^ngSwitch' ,
108
115
compile : function ( element , attrs , transclude ) {
109
116
return function ( scope , element , attr , ctrl ) {
110
- ctrl . cases [ '?' ] = transclude ;
117
+ ctrl . cases [ '?' ] = ( ctrl . cases [ '?' ] || [ ] ) ;
118
+ ctrl . cases [ '?' ] . push ( transclude ) ;
111
119
} ;
112
120
}
113
121
} ) ;
0 commit comments