我有一个角度动画,它将垂直扩展/折叠元素。在Chrome和Firefox中,这看起来不错。但是,对于其他不支持WebAnimations的浏览器,将使用Angular生成的CSSAnimation,并且overflow-y
属性不会在那里转换,并且看起来很糟。
因此,作为一种解决方法,我通过根据对WebAnimations的支持来关闭动画,从而为这些浏览器制作了替代动画。
一切看上去都很好,并且工作得很好...直到我们在打开AOT编译功能的产品环境中进行构建之前,AOT都会编译掉对window.*
的调用,因为通常它要求{{1} } ed。
我不能@Inject()
进入动画,该怎么办?
这是我的双重动画,可以与JIT编译器一起很好地工作
@Inject
我是我的const animForWebAnimations: AnimationMetadata[] = [
state('*', style({
height: '*',
})),
state('void', style({
height: '0',
'overflow-y': 'hidden',
})),
//Same transition duration/easing when entering or leaving
transition('* => *', animate(`300ms`))
];
const animForCssAnimations: AnimationMetadata[] = [
state('*', style({
height: '*',
'transform-origin': 'center 0',
transform: 'scaleY(1)'
})),
state('void', style({
height: '0px',
'transform-origin': 'center 0',
transform: 'scaleY(0)'
})),
transition('* => *', animate(`300ms`))
];
const expandCollapseAnimationMetadata = 'animate' in document.documentElement ? animForWebAnimations : animForCssAnimations;
export const expandCollapseAnimation = trigger('expandCollapse', expandCollapseAnimationMetadata);
,我有一家工厂将提供值(因为app.module
在AOT编译中产生了错误),如下所示:
useValue
我尝试将export function getWindowFactory(): Window {
return window;
}
...
@NgModule({
declarations: [ AppComponent ],
imports: [ ... ],
providers: [
{provide: 'Window', useFactory: getWindowFactory},
...
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
函数导入到动画中,但是产生了此错误:
src \ app \ components \ my.component.ts(16,18)中的错误:“ MyComponent”的模板编译过程中发生错误
装饰器中不支持函数调用,但在'expandCollapseAnimation'中调用了'getWindowFactory'
'expandCollapseAnimation'在src \ app \ animations \ expand-collapse.animation.ts(38,13)处调用'getWindowFactory'。
现在看来,除非我在这里遗漏了一些东西,否则似乎没有办法制作条件动画。这可能吗?