2017-02-06 68 views
1

基本上我希望能夠當滿足條件,我的動畫應用到特定的盒子。在我的應用程序這方面的需求,當用戶給出了問題1(中的Component1)的答案,發生 - >通過共享服務 - >在COMPONENT2我得到通知一下,如果答案是正確的,我將擴展與ID = 1盒(我用id只是指出框的特殊性的重要性)Angular2動畫[@triggerName]不是* ngFor工作

[@triggerName] = "my_value_from_expression"值不工作添加*ngFor但存在的價值;

如果我這樣做:ng.probe($0)._debugInfo._view.changeDetectorRef._view在包裝盒上,使我這個(_expr_3是看了值):

...

_el_0:DIV#1.box

_expr_2 : 「1」

_expr_3: 「animate1」

_expr_4: 「BOX1」

...

所以我有這樣的:

frame.component.ts

@Component({ 
selector: 'app-frame', 
templateUrl: './frame.component.html', 
styleUrls: ['./frame.component.css'], 
animations:[ 
    trigger('boxScale',[ 
    state('true', style({ 
     transform: 'scale(1.2)', 
     })), 
    state('false', style({ 
    transform: 'scale(1)', 
    })), 
    transition('false => true', animate('100ms ease-in')), 
    transition('true => false', animate('100ms ease-out')), 
    ]),] 
}) 
export class FrameComponent implements OnInit { 
    answ:string[]; 
    boxes: string[] = []; 
    animate1:boolean = true; 
    animate2:boolean = false; 

constructor(private _commService: CommunicateService) { 
    this._commService.answerSource.subscribe((result:string[]) => { 
    this.answ = result; 
    this.animate(result) 
}) 

    for(let i = 1; i <= 2; i++){ 
    this.boxes.push("animate"+i); 
    } 
} 
animate(result){ 
/***** result: ['q_id',corect_answ','user_answ'] *****/ 
    if(result[1] != undefined && result[1] === result[2]){ 
     this.animate1 = !this.animate1; 
     this.animate2 = !this.animate2; 
    } 
    } 
} 

frame.component.html

<div class="boxes"> 
    <div class="box" [@boxScale]="animate1">Box_1</div> 
    <div class="box" [@boxScale]="animate2">Box_2</div> 
    <div *ngFor="let box of boxes; let i = index; " class="box" id="{{i+1}}" [@boxScale]="box">Box{{i+1}}</div> 
</div> 

什麼一世 嘗試做的是與加ngfor爲[@boxScale]正確的值,因此其結果應該是:

<div class="boxes"> 
    <div class="box" [@boxScale]="animate1">Box_1</div> 
    <div class="box" [@boxScale]="animate2">Box_2</div> 
    <div class="box" id="1" [@boxScale]="animate1">Box1</div> 
    <div class="box" id="2" [@boxScale]="animate2">Box2</div> 
</div> 

前兩個硬編碼的元素只是罰款與animate1animate2變量,但其他兩個,與*ngFor產生不工作在所有。

我在這裏做錯了什麼?

+0

箱:字符串[] = [];你需要布爾數組我覺得在構造 – MMK

+0

看 - 我的箱子陣列看起來像這樣:「animate1」,「animate2」] – sTx

+0

我用占卜和數組是確定 – sTx

回答

0

嘗試類似這樣:檢查Plunker如果下面的代碼沒有意義。

import { 
    Component, OnChanges, Input, 
    trigger, state, animate, transition, style 
} from '@angular/core'; 

@Component({ 
    selector : 'ease-inout', 
    animations: [ 
    trigger('boxScale',[ 
    state('true', style({ 
     transform: 'scale(1.2)', 
     })), 
    state('false', style({ 
    transform: 'scale(1)', 
    })), 
    transition('false => true', animate('100ms ease-in')), 
    transition('true => false', animate('100ms ease-out')), 
    ]) 
    ], 
    template: ` 

    <div class="boxes"> 
     <div class="box" [@boxScale]="animate1">Box_1</div> 
     <div class="box" [@boxScale]="animate2">Box_2</div> 
    <div *ngFor="let box of boxes; let i = index; " class="box" id="{{i+1}}" [@boxScale]="box">Box{{i+1}}</div> 
</div> 
    ` 
}) 
export class EaseInOutComponent implements OnChanges { 
    boxes: boolean[] = []; 
    animate1:boolean = true; 
    animate2:boolean = false; 

    constructor() 
    { 
    // just for example 
    this.boxes.push(this.animate1); 
    this.boxes.push(this.animate2); 
    console.log(this.boxes) //[true, false] 
    } 

} 

希望這將有助於..
Output

+0

請看下面的答案 - 你的答案是好的,但只適用於不可改變的值;如果我修改animate1值第一個硬編碼框的作品,但首先生成不(因爲它的boxScale值是真的不變'animate1) – sTx

0

@MMK - 請檢查update

<div> 
    <button (click)="box1()">Toggle Box1</button> 
    <button (click)="box2()">Toggle Box2</button> 
</div>  
box1(){ 
    this.animate1 = !this.animate1; 
} 
box2(){ 
    this.animate2 = !this.animate2; 
} 
+0

@MMK - 基本上我想能夠將我的動畫應用到特定的盒子當條件滿足。在我的應用程序中,當用戶給出'question1'(在'Component1') - >通過共享服務 - >'在COmponent2'中得到答案時,我會收到通知,如果答案是正確的,我將按比例'id = 1'的盒子(我用id只是指出盒子特殊性的重要性) – sTx

+0

所以我試圖通過給出獨特的'[@boxScale]'變量來實現這個功能,如:box 1 => '[@boxScale] =「animate1」'box2'[@boxScale] =「animate2」' – sTx

+0

然後在您的幫助下,我發現在我的數組中,我推送一個字符串而不是一個類對象, ,box表示一個字符串,不像我最初認爲的那樣是類的對象 - 另一方面,如果我在'* ngFor'框中推'this.animate1'將會是true或false(this.animate1的值)而不是'animate1'本身就像我需要 – sTx