mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-06-10 15:28:51 +08:00
refactor(ngSwitch): remove undocumented change attribute from ngSwitch
BREAKING CHANGE:
Ever since 0df93fd, tagged in v1.0.0rc1, the ngSwitch directive has had an undocumented `change`
attribute, used for evaluating a scope expression when the switch value changes.
While it's unlikely, applications which may be using this feature should work around the removal
by adding a custom directive which will perform the eval instead. Directive controllers are
re-instantiated when being transcluded, so by putting the attribute on each item that you want
to be notified of a change to, you can more or less emulate the old behaviour.
Example:
```js
angular.module("switchChangeWorkaround", []).
directive("onSwitchChanged", function() {
return {
linke: function($scope, $attrs) {
$scope.$parent.$eval($attrs.change);
}
};
});
```
```html
<div ng-switch="switcher">
<div ng-switch-when="a" on-switch-changed="doSomethingInParentScope()"></div>
<div ng-switch-when="b" on-switch-changed="doSomethingInParentScope()"></div>
</div>
```
Closes #8858
Closes #8822
This commit is contained in:
committed by
Caitlin Potter
parent
ac535549c9
commit
0f806d9659
@@ -165,7 +165,6 @@ var ngSwitchDirective = ['$animate', function($animate) {
|
||||
selectedScopes.length = 0;
|
||||
|
||||
if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
|
||||
scope.$eval(attr.change);
|
||||
forEach(selectedTranscludes, function(selectedTransclude) {
|
||||
selectedTransclude.transclude(function(caseElement, selectedScope) {
|
||||
selectedScopes.push(selectedScope);
|
||||
|
||||
@@ -208,19 +208,6 @@ describe('ngSwitch', function() {
|
||||
expect(element.text()).toEqual('236');
|
||||
}));
|
||||
|
||||
|
||||
it('should call change on switch', inject(function($rootScope, $compile) {
|
||||
element = $compile(
|
||||
'<ng:switch on="url" change="name=\'works\'">' +
|
||||
'<div ng-switch-when="a">{{name}}</div>' +
|
||||
'</ng:switch>')($rootScope);
|
||||
$rootScope.url = 'a';
|
||||
$rootScope.$apply();
|
||||
expect($rootScope.name).toEqual('works');
|
||||
expect(element.text()).toEqual('works');
|
||||
}));
|
||||
|
||||
|
||||
it('should properly create and destroy child scopes', inject(function($rootScope, $compile) {
|
||||
element = $compile(
|
||||
'<ng:switch on="url">' +
|
||||
|
||||
Reference in New Issue
Block a user