feat(animations): allow @.disabled property to work without an expression (#18713)
PR Close #18713
This commit is contained in:
parent
e228f2caa6
commit
2159342038
|
@ -218,7 +218,7 @@ export class BindingParser {
|
||||||
// This will occur when a @trigger is not paired with an expression.
|
// This will occur when a @trigger is not paired with an expression.
|
||||||
// For animations it is valid to not have an expression since */void
|
// For animations it is valid to not have an expression since */void
|
||||||
// states will be applied by angular when the element is attached/detached
|
// states will be applied by angular when the element is attached/detached
|
||||||
const ast = this._parseBinding(expression || 'null', false, sourceSpan);
|
const ast = this._parseBinding(expression || 'undefined', false, sourceSpan);
|
||||||
targetMatchableAttrs.push([name, ast.source !]);
|
targetMatchableAttrs.push([name, ast.source !]);
|
||||||
targetProps.push(new BoundProperty(name, ast, BoundPropertyType.ANIMATION, sourceSpan));
|
targetProps.push(new BoundProperty(name, ast, BoundPropertyType.ANIMATION, sourceSpan));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2691,6 +2691,43 @@ export function main() {
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(getLog().length).toEqual(1);
|
expect(getLog().length).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should treat the property as true when the expression is missing', () => {
|
||||||
|
@Component({
|
||||||
|
selector: 'parent-cmp',
|
||||||
|
animations: [
|
||||||
|
trigger(
|
||||||
|
'myAnimation',
|
||||||
|
[
|
||||||
|
transition(
|
||||||
|
'* => go',
|
||||||
|
[
|
||||||
|
style({opacity: 0}),
|
||||||
|
animate(500, style({opacity: 1})),
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
template: `
|
||||||
|
<div @.disabled>
|
||||||
|
<div [@myAnimation]="exp"></div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
})
|
||||||
|
class Cmp {
|
||||||
|
exp = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
TestBed.configureTestingModule({declarations: [Cmp]});
|
||||||
|
|
||||||
|
const fixture = TestBed.createComponent(Cmp);
|
||||||
|
const cmp = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
resetLog();
|
||||||
|
|
||||||
|
cmp.exp = 'go';
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(getLog().length).toEqual(0);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -206,7 +206,8 @@ export class AnimationRenderer extends BaseAnimationRenderer implements Renderer
|
||||||
setProperty(el: any, name: string, value: any): void {
|
setProperty(el: any, name: string, value: any): void {
|
||||||
if (name.charAt(0) == ANIMATION_PREFIX) {
|
if (name.charAt(0) == ANIMATION_PREFIX) {
|
||||||
if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {
|
if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {
|
||||||
this.disableAnimations(el, !!value);
|
value = value === undefined ? true : !!value;
|
||||||
|
this.disableAnimations(el, value as boolean);
|
||||||
} else {
|
} else {
|
||||||
this.engine.process(this.namespaceId, el, name.substr(1), value);
|
this.engine.process(this.namespaceId, el, name.substr(1), value);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue