提前编译静态分析错误

时间:2017-05-16 18:18:56

标签: javascript angular typescript angular-cli

我已经将问题指向导出的函数。

animations.ts:

export function slideInRight(triggerName = 'slideInRight', unactivatedState = 'initial', activatedState = 'state-0', duration = '1s') {
  return trigger(triggerName, [
    state(unactivatedState, style({
      transform: 'translateX(-100%)'
    })),
    state(activatedState, style({
      transform: 'translateX(0)'
    })),
    transition(`${unactivatedState} => ${activatedState}`, animate(`${duration} ease-in-out`)),
    transition(`${activatedState} => ${unactivatedState}`, animate(`${duration} ease-in-out`))
  ]);
}

home.component.ts:

import { slideInRight } from 'animations'

@Component({
  // ...
  animations: [slideInRight('param1', 'param2')]
})
export class HomeComponent {}

尝试进行AOT编译时出现以下错误:

  

ERROR in Error遇到静态解析符号值。表达形式不受支持(原始.ts文件中的位置24:16),解析路径中的符号slideInLeft / to / project / angular / animations.ts,解析路径中的符号HomeComponent / to / project / angular / app / pages / home /home.component.ts,解析路径中的符号HomeComponent / to / project / angular / app / pages / home / home.component.ts

如果我在装饰器调用上注释掉这个动画属性,那么错误就会消失。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

这里有一些对我有用的语法:

animations: [
    fadeInOut(),
],

export function fadeInOut(): AnimationEntryMetadata {
    return trigger("fadeInOut", [
        state("in", style({opacity: "1"})),
        transition("void => *", [
            style({opacity: "1"}),
            animate(100),
        ]),
        transition("* => void", [
            animate(100, style({opacity: "0.0"})),
        ]),
    ]);
 }

已经有一段时间了,但是如果我没记错的话,当我在fadeInOut()中调用一个不能通过提前编译器进行静态分析的方法时,我在某一点上收到了类似的错误。我当时的解决方案是使我的动画方法完全自包含。

答案 1 :(得分:0)

我使用动画的模板字符串时遇到了同样的问题。尝试重构转换以使用正常的字符串连接:

transition(unactivatedState + ' => ' + activatedState, animate(duration + ' ease-in-out')),
transition(activatedState + ' => ' + unactivatedState, animate(duration + ' ease-in-out'))

]);