2017-04-20 34 views
1

私は単純なシナリオを持っていますが、それを動作させることはできません!ngIf - チェックされた後に式が変更されました

私の見解では、高さが制限されたボックスにテキストを表示しています。テキストが入って来たときに

テキストは、サーバーからフェッチされているので、ビューが更新される。

今私は、内のテキスト場合は、ボタンを表示する必要があることngIf「を有し拡大」ボタンを持っていますボックスがあふれています。 発現が後に変更されました:

問題は、テキストが、それがフェッチされると、変更角度の変化検出が終了した後に、ボタンの状態はtrueになります「拡大」ので...

だから私はこのエラーを取得するということですそれがチェックされた。以前の値: 'false'。現在の値: 'true'

明らかにボタンが...

を示していないが、このPlunker(...エラーを確認するために、コンソールをチェックしてください)

この作品を作るためにどのように任意のアイデアを参照してください?このエラーがdev modeであなたのために発生

+0

関連:https://github.com/angular/angular/

ので、次の目盛りを実行する変更検出を強制するために、我々はこのような何かを行うことができます問題/ 6005#issuecomment-165905348 – Und3rTow

答えて

3

dev mode変化検出では、モデルが変更されたかどうかを確認するために、すべての定期的な変更検出の実行後に追加のターンを追加します。

export class App implements AfterViewChecked { 

    show = false; // add one more property 

    constructor(private cdRef : ChangeDetectorRef) { // add ChangeDetectorRef 
    //... 
    } 
    //... 
    ngAfterViewChecked() { 
    let show = this.isShowExpand(); 
    if (show != this.show) { // check if it change, tell CD update view 
     this.show = show; 
     this.cdRef.detectChanges(); 
    } 
    } 

    isShowExpand() 
    { 
    //... 
    } 
} 

ライブデモ:https://plnkr.co/edit/UDMNhnGt3Slg8g5yeSNO?p=preview

+0

魅力的な作品です!ありがとう! – naomi

+0

これは私のために働く。私のngAfterViewCheckedメソッドでは、this.cdRef.detectChanges();だけがあります。 – Ziggler

関連する問題