2017-05-16 66 views
0

我已經將問題指向導出的函數。提前編譯靜態分析錯誤

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編譯時,我得到了以下錯誤:錯誤

遇到錯誤靜態解析符號值。不支持表達式形式(原始.ts文件中的位置24:16),解析path/to/project/angular/animations.ts中的符號slideInLeft,解析路徑中的HomeComponent/to/project/angular/app/pages/home /home.component.ts,解決路徑/要/項目符號HomeComponent /角/應用/網頁/首頁/ home.component.ts

如果我註釋掉這個動畫屬性的裝飾呼叫時,錯誤消失。我在這裏做錯了什麼?

回答

0

我有使用模板字符串動畫相同的問題。嘗試重構您的轉換以使用正常字符串連接:

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

]);

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()中,這是提前編譯器不能靜態分析的。那時我的解決方案是讓我的動畫方法完全獨立。

+0

你是什麼意思完全獨立? – Jeff

+0

我用實際的方法更新了我的問題。你能指出什麼是問題嗎? – Jeff

+0

當我說'完全獨立'時,我的意思是我一直在調用AOT編譯器在抱怨時編寫的輔助函數(fadeIn和fadeOut)。我重構了所以我不依賴於這些幫助函數。至於你的第二個問題,我現在還不確定。它看起來像AOT編譯器抱怨'slideInLeft':「不支持表達式形式(在原始.ts文件中的位置24:16),解析符號slideInLeft。'」但我沒有看到slideInLeft在您發佈的代碼中的任何地方。 – user3821892