Angular2:ネストされた* ngForの結果、「チェック後に式が変更されました」

タイリオン

親の「my-app」コンポーネントで使用しているangular2コンポーネント「my-tree」があります。「my-app」は次のとおりです。

@Component({
  selector: 'my-app',
  providers: [],
  template: `
    <my-tree *ngFor="#node of nodes" [title]="node">
      <my-tree *ngFor="#subNode of getSubNodes(node)" [title]="subNode">
      </my-tree>
    </my-tree>  
  `,
  directives: [MyTree]
})
export class App {
  constructor() {
    this.nodes = ['Angular2', 'typescript', 'js']    
  }

  getSubNodes( node: string ) {
    if( node === 'Angular2') {
      return ['2.0.0', '1.4.2']
    }
    if ( node === 'typescript' ) {
      return ['1.7.3'];
    }
    if ( node === 'js' ) {
      return ['es-6'];
    }    
  }  
}

my-treeは単純なコンポーネントです-

@Component({
  selector: 'my-tree',
  providers: [],
  inputs: ['title'],
  template: `
    <ul>
      <li><span>{{title}}</span></li>
      <ng-content></ng-content>
    </ul>
  `,
  directives: []
})
export class MyTree {
    private title: string;

}

これを実行すると、コンソールは次のエラーでログに記録されます-チェック後に式 'getSubNodes(node)in App @ 2:15'が変更されました。以前の値:「2.0.0,1.4.2」。現在の値:「2.0.0,1.4.2」。

実際のコードについては、このプランク参照してください

私のコードのアイデアは、ツリー(単なる例)を作成することです。最初のレベルは配列(ハードコードされた値)から取得され、2番目のレベルは現在のノード(または値)を指定して次のセットを返す関数から取得されます。最初のレベル。そして、この関数の呼び出しでは、Angularは、チェック後に式が変更されたことを訴えます。値は以前のエラーメッセージとまったく同じように報告されますが。SOでこのエラーを検索したところ、参照はほとんど見つかりませんでしたが、ほとんどの場合、変更検出を呼び出すことを提案しています。なぜこれが必要なのか、またその方法も理解できません。また、これは診断メッセージのみであり、本番モードではスローされないことも読みました。

* ngFor内で関数を呼び出すことはできませんか?このエラーを取り除くために何をすべきですか?

GünterZöchbauer

問題は

 getSubNodes( node: string ) {
    if( node === 'Angular2') {
      return ['2.0.0', '1.4.2']
    }
    if ( node === 'typescript' ) {
      return ['1.7.3'];
    }
    if ( node === 'js' ) {
      return ['es-6'];
    }    
  }  

ここでは、Angularが値をチェックするたびに、新しい配列インスタンスを取得するため、それらが同じになることはありません。Angularは、配列のインスタンスの同等性のみの値を比較しません。

このチェックも開発モードでのみ実行されます。Angular2の本番モードと開発モードの違いは何ですか?も参照してください

このようにAngularは満たされるべきです

 angular2 = ['2.0.0', '1.4.2'];
 typeScript = ['1.7.3'];
 js = ['es-6'];

 getSubNodes( node: string ) {
    if( node === 'Angular2') {
      return this.angular2;
    }
    if ( node === 'typescript' ) {
      return this.typeScript;
    }
    if ( node === 'js' ) {
      return this.js;
    }    
  }  

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Angular2「チェック後に式が変更されました」

分類Dev

Angular-ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。(ネストされたFormArray)

分類Dev

Angular2変更検出「チェック後に式が変更されました」

分類Dev

Angular-チェック後に式が変更されました。以前の値

分類Dev

Angular2rc6式がチェック後に変更されました

分類Dev

Angular2-チェック後に式が変更されました

分類Dev

ngmodelを使用したAngular2動的フォームの例では、「チェック後に式が変更されました」という結果になります。

分類Dev

Angular8-チェック後に式が変更されました

分類Dev

Angular ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。cdkdrag

分類Dev

ngIf-チェック後に式が変更されました

分類Dev

ngIf-チェック後に式が変更されました

分類Dev

ngu-carousel :: ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました

分類Dev

Angular4-NG-IFの使用中に「チェック後に式が変更されました」エラー

分類Dev

動的な色の変更-ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました

分類Dev

チェックされた後にAngular4式が変更されましたエラー

分類Dev

チェックされた後、式___が変更されました

分類Dev

「ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました」Angularのエラー

分類Dev

*タブ作成時の角度2の場合-チェック後に式が変更されました

分類Dev

チェック後にエラー値が変更されました(Angular2のステートフルパイプ)

分類Dev

フォーム値の更新でAngular2(beta3)「チェック後に式が変更されました」

分類Dev

コンポーネントプロパティが現在の日時に依存している場合に、Angular2の「式はチェック後に変更されました」という例外を管理する方法

分類Dev

anglejs 2 rc4変更検出:チェック後に式が変更されました

分類Dev

ngIf-チェック後に式が変更されました。以前の値: 'ngIf:false'。現在の値: 'ngIf:true'

分類Dev

「式がチェックされた後に変更されました」をトリガーせずに、Angular2で入力検証のためにngOnChangesを実装する方法。エラー

分類Dev

Angular2モーダルポップアップエラー「チェック後に式が変更されました」

分類Dev

Angular2モーダルポップアップエラー「チェック後に式が変更されました」

分類Dev

ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。以前の値:「未定義」

分類Dev

ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。以前の値: '未定義'例外

分類Dev

ネストされたngForを使用するAngular2

Related 関連記事

  1. 1

    Angular2「チェック後に式が変更されました」

  2. 2

    Angular-ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。(ネストされたFormArray)

  3. 3

    Angular2変更検出「チェック後に式が変更されました」

  4. 4

    Angular-チェック後に式が変更されました。以前の値

  5. 5

    Angular2rc6式がチェック後に変更されました

  6. 6

    Angular2-チェック後に式が変更されました

  7. 7

    ngmodelを使用したAngular2動的フォームの例では、「チェック後に式が変更されました」という結果になります。

  8. 8

    Angular8-チェック後に式が変更されました

  9. 9

    Angular ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。cdkdrag

  10. 10

    ngIf-チェック後に式が変更されました

  11. 11

    ngIf-チェック後に式が変更されました

  12. 12

    ngu-carousel :: ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました

  13. 13

    Angular4-NG-IFの使用中に「チェック後に式が変更されました」エラー

  14. 14

    動的な色の変更-ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました

  15. 15

    チェックされた後にAngular4式が変更されましたエラー

  16. 16

    チェックされた後、式___が変更されました

  17. 17

    「ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました」Angularのエラー

  18. 18

    *タブ作成時の角度2の場合-チェック後に式が変更されました

  19. 19

    チェック後にエラー値が変更されました(Angular2のステートフルパイプ)

  20. 20

    フォーム値の更新でAngular2(beta3)「チェック後に式が変更されました」

  21. 21

    コンポーネントプロパティが現在の日時に依存している場合に、Angular2の「式はチェック後に変更されました」という例外を管理する方法

  22. 22

    anglejs 2 rc4変更検出:チェック後に式が変更されました

  23. 23

    ngIf-チェック後に式が変更されました。以前の値: 'ngIf:false'。現在の値: 'ngIf:true'

  24. 24

    「式がチェックされた後に変更されました」をトリガーせずに、Angular2で入力検証のためにngOnChangesを実装する方法。エラー

  25. 25

    Angular2モーダルポップアップエラー「チェック後に式が変更されました」

  26. 26

    Angular2モーダルポップアップエラー「チェック後に式が変更されました」

  27. 27

    ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。以前の値:「未定義」

  28. 28

    ExpressionChangedAfterItHasBeenCheckedError:チェック後に式が変更されました。以前の値: '未定義'例外

  29. 29

    ネストされたngForを使用するAngular2

ホットタグ

アーカイブ