'use strict'; /** * @ngdoc directive * @name angular.module.ng.$compileProvider.directive.ng-switch * @restrict EA * * @description * Conditionally change the DOM structure. * * @usageContent * ... * ... * ... * ... * * @scope * @param {*} ng-switch|on expression to match against ng-switch-when. * @paramDescription * On child elments add: * * * `ng-switch-when`: the case statement to match against. If match then this * case will be displayed. * * `ng-switch-default`: the default case when no other casses match. * * @example
selection={{selection}}
Settings Div
Home Span default
it('should start in settings', function() { expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Settings Div/); }); it('should change to home', function() { select('selection').option('home'); expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Home Span/); }); it('should select deafault', function() { select('selection').option('other'); expect(element('.doc-example-live [ng-switch]').text()).toMatch(/default/); });
*/ var NG_SWITCH = 'ng-switch'; var ngSwitchDirective = valueFn({ restrict: 'EA', compile: function(element, attr) { var watchExpr = attr.ngSwitch || attr.on, cases = {}; element.data(NG_SWITCH, cases); return function(scope, element){ var selectedTransclude, selectedElement; scope.$watch(watchExpr, function(value) { if (selectedElement) { selectedElement.remove(); selectedElement = null; } if ((selectedTransclude = cases['!' + value] || cases['?'])) { scope.$eval(attr.change); selectedTransclude(scope.$new(), function(caseElement, scope) { selectedElement = caseElement; element.append(caseElement); element.bind('$destroy', bind(scope, scope.$destroy)); }); } }); }; } }); var ngSwitchWhenDirective = ngDirective({ transclude: 'element', priority: 500, compile: function(element, attrs, transclude) { var cases = element.inheritedData(NG_SWITCH); assertArg(cases); cases['!' + attrs.ngSwitchWhen] = transclude; } }); var ngSwitchDefaultDirective = ngDirective({ transclude: 'element', priority: 500, compile: function(element, attrs, transclude) { var cases = element.inheritedData(NG_SWITCH); assertArg(cases); cases['?'] = transclude; } });