|
62 | 62 | var NG_SWITCH = 'ng-switch';
|
63 | 63 | var ngSwitchDirective = valueFn({
|
64 | 64 | restrict: 'EA',
|
65 |
| - compile: function(element, attr) { |
| 65 | + require: 'ngSwitch', |
| 66 | + controller: function ngSwitchController() { |
| 67 | + this.cases = {}; |
| 68 | + }, |
| 69 | + link: function(scope, element, attr, ctrl) { |
66 | 70 | var watchExpr = attr.ngSwitch || attr.on,
|
67 |
| - cases = {}; |
| 71 | + selectedTransclude, |
| 72 | + selectedElement, |
| 73 | + selectedScope; |
68 | 74 |
|
69 |
| - element.data(NG_SWITCH, cases); |
70 |
| - return function(scope, element){ |
71 |
| - var selectedTransclude, |
72 |
| - selectedElement, |
73 |
| - selectedScope; |
74 |
| - |
75 |
| - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { |
76 |
| - if (selectedElement) { |
77 |
| - selectedScope.$destroy(); |
78 |
| - selectedElement.remove(); |
79 |
| - selectedElement = selectedScope = null; |
80 |
| - } |
81 |
| - if ((selectedTransclude = cases['!' + value] || cases['?'])) { |
82 |
| - scope.$eval(attr.change); |
83 |
| - selectedScope = scope.$new(); |
84 |
| - selectedTransclude(selectedScope, function(caseElement) { |
85 |
| - selectedElement = caseElement; |
86 |
| - element.append(caseElement); |
87 |
| - }); |
88 |
| - } |
89 |
| - }); |
90 |
| - }; |
| 75 | + scope.$watch(watchExpr, function ngSwitchWatchAction(value) { |
| 76 | + if (selectedElement) { |
| 77 | + selectedScope.$destroy(); |
| 78 | + selectedElement.remove(); |
| 79 | + selectedElement = selectedScope = null; |
| 80 | + } |
| 81 | + if ((selectedTransclude = ctrl.cases['!' + value] || ctrl.cases['?'])) { |
| 82 | + scope.$eval(attr.change); |
| 83 | + selectedScope = scope.$new(); |
| 84 | + selectedTransclude(selectedScope, function(caseElement) { |
| 85 | + selectedElement = caseElement; |
| 86 | + element.append(caseElement); |
| 87 | + }); |
| 88 | + } |
| 89 | + }); |
91 | 90 | }
|
92 | 91 | });
|
93 | 92 |
|
94 | 93 | var ngSwitchWhenDirective = ngDirective({
|
95 | 94 | transclude: 'element',
|
96 | 95 | priority: 500,
|
| 96 | + require: '^ngSwitch', |
97 | 97 | compile: function(element, attrs, transclude) {
|
98 |
| - var cases = element.inheritedData(NG_SWITCH); |
99 |
| - assertArg(cases); |
100 |
| - cases['!' + attrs.ngSwitchWhen] = transclude; |
| 98 | + return function(scope, element, attr, ctrl) { |
| 99 | + ctrl.cases['!' + attrs.ngSwitchWhen] = transclude; |
| 100 | + }; |
101 | 101 | }
|
102 | 102 | });
|
103 | 103 |
|
104 | 104 | var ngSwitchDefaultDirective = ngDirective({
|
105 | 105 | transclude: 'element',
|
106 | 106 | priority: 500,
|
| 107 | + require: '^ngSwitch', |
107 | 108 | compile: function(element, attrs, transclude) {
|
108 |
| - var cases = element.inheritedData(NG_SWITCH); |
109 |
| - assertArg(cases); |
110 |
| - cases['?'] = transclude; |
| 109 | + return function(scope, element, attr, ctrl) { |
| 110 | + ctrl.cases['?'] = transclude; |
| 111 | + }; |
111 | 112 | }
|
112 | 113 | });
|
0 commit comments