2016-09-23 7 views
0

私は何時間も探していました。私はhtmlをfadeInにしようとしていますが、それは常に不透明です.ngForが表示されたら直ちにそれを消してしまいません。 FadingOutは問題ではありません。Cantはangade2アニメーションをFadeInに取得

@Component({ 
selector:'c-translation-wizard', 
templateUrl: 'scripts/translationWizard/TTranslationWizard.html', 
animations: [ 
    trigger('flyInOut', [ 
     state('active', style({ opacity: 1 })), 
     state('inactive', style({ opacity: 0 })), 
     transition('active => inactive', [ 
      style({ opacity: 0 }), 
      animate('0.7s ease-out') 
     ]), 
     transition('inactive => active', [ 
      animate('0.7s ease-in', style({ opacity: 1 })) 
     ]), 
     transition('void => *', [ 
      style({ opacity: 1 }), 
      animate('0.7s ease-in') 
     ]), 
     transition('* => void', [ 
      animate('0.7s ease-out', style({ opacity: 0 })) 
     ]), 
     transition('void => active', [ 
      style({ opacity: 1 }), 
      animate('0.7s ease-in') 
     ]), 
     transition('inactive => void', [ 
      animate('0.7s ease-out', style({ opacity: 0 })) 
     ]) 
    ]) 
]) 
export class CTranslationWizard implements InterfaceLocalStorage, OnInit, OnDestroy { 

results : CTranslationWizard_results[]; 
result$ : any; 
importExport : string; 
type: string; 
errors : string[] = []; 
log : Logger; 
sHtsTranslation : SHtsTranslation; 
toggle = false; 
gA : any; 

constructor(GoogleAnalytics : GoogleAnalytics, 
      log : Logger, 
      sHtsTranslation : SHtsTranslation 
){ 
    this.log = log; 
    this.gA = GoogleAnalytics; 
    this.sHtsTranslation = sHtsTranslation; 
    this.importExport = "export"; 
    this.results = []; 

    this.type = '-'; 
    //LocalStorage.getItem(this); 
} 


setImportExport(value : string){ 
    this.importExport = value; 
} 

onlyNumberic(ip:string) : boolean{ 
    let isNumber : boolean = /^\d+$/.test(ip); 
    return isNumber; 
} 

isEightTenDigits(ip:string) : boolean{ 
    let isET : boolean = (ip.length == 8 || ip.length == 10); 
    return isET; 
} 

isSixDigits(ip:string) : boolean { 
    let isET : boolean = (ip.length == 6); 
    return isET; 
} 

isFiveDigits(ip:string) : boolean{ 
    let isET : boolean = ip.length == 5; 
    return isET; 
} 

errorText() { 
    let err : string[] = []; 
    err.push("An SITC number can only be 5 digits long"); 
    err.push("An NAICS number can only be 6 digits long"); 
    err.push("An HTC number can only be 8 or 10 digits long."); 
    return err; 
} 

getType(value : string) : string { 
    if(this.onlyNumberic(value)) { 
     let val : number = parseInt(value); 
     let type : string = getType(val); 
     return (type ? type : "-"); 
    } else { 
     return '-'; 
    } 
} 

validateInput(value : string) : string[] { 
    let err : string[] = []; 

    if(!this.onlyNumberic(value)){ 
     err.push("Only numeric characters maybe used."); 
     return err; 
    } 

    let eightTen : boolean = this.isEightTenDigits(value); 
    if(eightTen) { 
     return []; 
    } 

    let six : boolean = this.isSixDigits(value); 
    if(six) { 
     return []; 
    } 

    let five : boolean = this.isFiveDigits(value); 
    if(five) { 
     return []; 
    } 

    return this.errorText(); 
} 

submit(value : string) { 

    this.gA.pageEvent(
     "info", 
     "click", 
     "translationWizard_submitButton", 
    ); 

    this.errors = this.validateInput(value); 
    if(this.errors.length == 0){ 

     let val : number = parseInt(value); 
     //do query for results, delete this 
     //hit service get result 
     //this.results.push(new MImportExport('htic',12345678,this.outputType, 12345, 12345)); 
     this.sHtsTranslation.htsTranslation(val, this.importExport, 101); 
     //save the new model to local storage 
     //LocalStorage.setItem(this); 

    } 
} 

removeByIndex(index : number){ 

    this.gA.pageEvent(
     "info", 
     "click", 
     "translationWizard_removeButton" 
    ); 
    this.results.splice(index,1); 

} 

removeAll(){ 
    this.gA.pageEvent(
     "info", 
     "click", 
     "translationWizard_removeAllButton" 
    ); 
    this.results.splice(0); 
} 

//OnInit, OnDestroy interfaces 
ngOnInit(){ 
    this.result$ = this.sHtsTranslation.htsTranslation$.subscribe(
     (modelHts : ModelHts) => { 
      this.log.debug(this, "pushing modelHts into results"); 
      this.results.unshift(modelHts); 
     }); 
    this.log.debug(this, "sHtsTranslation subscribed"); 
} 

ngOnDestroy(){ 
    if(this.result$){ 
     this.result$.unsubscribe(); 
     this.log.debug(this, "sHtsTranslation unsubscribed"); 
    } 
} 

//interface LocalStorage 
getExclusionList(): string[] { 
    return ['errors','outputType', 'gA', 'sHtsTranslation']; 
} 

} 

export interface CTranslationWizard_results { 
inputNumber : number; 
inputType : string; 
resultsForIE : [{ 
    htc8 : number, 
    htc10 : number, 
    sitc : number, 
    naics : number 
}] 
} 


<table class="table table-bordered table-hover"> 
        <thead> 
         <tr> 
          <th>#</th> 
          <th>Input Type</th> 
          <th>Input Number</th> 
          <th>I/E</th> 
          <th class="fixed">SITC</th> 
          <th class="fixed">NAICS</th> 
          <th class="fixed">HTC-8</th> 
          <th class="fixed">HTC-10</th> 
          <th> 
           <button 
             (click)="removeAll()" 
             type="button" 
             id="translationWizard_removeAllButton" 
             class="btn btn-default remove start end"> 
             <span 
              class="glyphicon glyphicon-trash" 
              aria-hidden="true"> 
             </span> 
           </button> 
          </th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr *ngFor="let modelHts_ of results; let i = index;" 
          [@flyInOut]="modelHts_.state"> 
          <th scope="row">{{i}}</th> 
          <td>{{modelHts_.inputType}}</td> 
          <td>{{modelHts_.inputNumber}}</td> 
          <td>{{modelHts_.importExport}}</td> 
          <td class="table-nested" colspan="4"> 
           <table class="table table-bordered table-hover"> 
            <tr *ngFor="let resultForIE of modelHts_.resultsForIE;"> 
             <td class="fixed">{{resultForIE.sitc}}</td> 
             <td class="fixed">{{resultForIE.naics}}</td> 
             <td class="fixed">{{resultForIE.htc8}}</td> 
             <td class="fixed">{{resultForIE.htc10}}</td> 
            </tr> 
           </table> 
          </td> 
          <th> 
           <button 
            (click)="removeByIndex(i)" 
            type="button" 
            id="translationWizard_removeButton" 
            class="btn btn-default remove start end"> 
             <span 
              class="glyphicon glyphicon-remove" 
              aria-hidden="true"> 
             </span> 
           </button> 
          </th> 
         </tr> 
        </tbody> 
       </table> 

上記のテンプレートでは、このコードは、配列に追加するときにフェードインする場所です。

<tr *ngFor="let modelHts_ of results; let i = index;" 
           [@flyInOut]="modelHts_.state"> 

どのようなアイデアですか?ありがとう

答えて

0

あなたのコントローラのコードがないと言うことはできません。私はそれがmodelHts_.stateと関係があると仮定します。それはどのように見えるのですか?

アニメーションの入力を気にするだけなら、[@flyInOut]="true"もできます。

+0

私はこの前に[@flyInOut] = "true"を設定しようとしましたが、動作しません。 –

+0

この点以外にも、アニメーションはここでは配列(この場合)とコンポーネントアニメーションメタデータ? –

1

アニメーションモジュールの新機能しかし、モデルを使用したビューが数多くある可能性があるため、ビューステート変数をサーバーからのデータモデルに埋め込むことはしたくありませんでした。 )。

アニメーションは、VOID状態とNgForに関して混乱しているようです。私はこの説明をできるだけ簡単にしようとします。

VOID状態は、角度変換が適用されていないhtml +スタイリングです。この場合、ngForはdomに要素を追加し、状態が変更され、スタイリングが適用されてその状態になります。 [@flyInOut] = 'active'かつstyle = "opacity:0;" (ngForで追加した場合)、不透明度:1に遷移します。

しかし、ngForでdomから削除すると、void状態に戻ることはありません。代わりに、変数を手動で制御して状態を制御し、アニメーションが完了した後に配列(ngFor)からタイマーを削除するタイマーを設定する必要があります。

ここでは、上記のコードの最終的な変更があり、その結果、実際のトランジションが行われます。

<tr #localRow 
          style="opacity: 0" 
          title="true" 
          *ngFor="let modelHts_ of results; let i = index;" 
          [@flyInOut]="localRow.title"> 

Iは、ローカル変数の状態を制御変数としての要素に「タイトル」(必要にmodelHts_状態コントローラを埋め込むない)に結合しました。

<button 
            (click)="localRow.title = removeByIndex(i)" 
            type="button" 
            id="translationWizard_removeButton" 
            class="btn btn-default remove start end"> 
             <span 
              class="glyphicon glyphicon-remove" 
              aria-hidden="true"> 
             </span> 
           </button> 

要素を削除するボタンは、タイトル/状態を変更します。

 state('true', style({ opacity: 1 })), 
     state('false', style({ opacity: 0 })), 
     transition('void => true', [ 
      animate('.75s') 
     ]), 
     transition('true => void', [ 
      animate('.75s') 
     ]), 
     transition('true => false', [ 
      animate('.75s') 
     ]), 
     transition('false => true', [ 
      animate('.75s') 
     ]) 


    removeByIndex(index : number) : boolean{ 

    this.gA.pageEvent(
     "info", 
     "click", 
     "translationWizard_removeButton" 
    ); 
    setTimeout(()=> { 
     this.results.splice(index,1); 
    },1000); 
    return false; 
} 

コントローラでは、アニメーションが遷移状態を完了した後で、配列からアイテムを削除するタイムアウトを設定しました。

誰かが間違っていた箇所を確認してください。またはこれはngForのバグです(VOID状態に移行する必要があります)。

また、状態をモデルに埋め込まないことについての他の提案は、コメントによって評価されます。

関連する問題