私はオブジェクトの静的配列を繰り返し処理し、内容を表示する単純なコンポーネントを持っています。このコンポーネントを大きなアプリケーションに追加すると、コンテンツが正しく表示されますが、クリックイベントを登録できません。 right click -> Inspect
を使用してクロムの要素を検査すると、bodyタグで挨拶され、期待どおり個々の要素にドリルダウンしません。静的な配列のオブジェクトで* ngForを反復処理すると、DOMは常に更新されます
手動でナビゲートすると、要素を調べると、コンポーネントがDOMによって常に更新されていることがわかります(divタグが点滅します)。私の理解では、静的配列なので変更が検出されるべきではありません。
オブジェクト配列を単純な文字列配列に変更すると、['a', 'b', 'c']
は正常に動作し、DOMは更新されません。
追加の要素を追加すると、ngFor以外のテンプレートは影響を受けず、常に更新されません。
私はV2.4.1
簡体コンポーネント
import { Component } from '@angular/core';
@Component({
\t selector: 'app-ngfor-test',
\t templateUrl: './ngfor-test.component.html',
\t styleUrls: ['./ngfor-test.component.css']
})
export class NgforTestComponent {
\t
\t get items() {
\t \t return [
\t \t \t {
\t \t \t \t 'label': 'a',
\t \t \t \t 'value': 'first'
\t \t \t },
\t \t \t {
\t \t \t \t 'label': 'b',
\t \t \t \t 'value': 'second'
\t \t \t },
\t \t \t {
\t \t \t \t 'label': 'c',
\t \t \t \t 'value': 'third'
\t \t \t }
\t \t ];
\t }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
テンプレート
<div class="item-container" *ngFor="let item of items">
\t <label>{{ item.label | uppercase }}</label>
\t <span>{{ item.value }}</span>
</div>
ありがとう。これは、オブジェクト配列が文字列配列と異なる動作をする理由を理解するのに役立ちます。私はgetterを使用しています。なぜなら、私はサーバから取得したrepsonseに基づいてコンテンツを動的に表示したいからです。 –
サーバからの応答が到着したときでも 'this.items'を更新することはできますが、実際に変更されたときだけ変更(再レンダリング)されます。 –
助けてくれてありがとう、私はセッターを利用して動的な価値を達成した –