2016-12-23 2 views
2

Я играю с Angular2 * ngFor и немного смущаюсь, когда он воссоздает DOM.Angular2 ngFor: при добавлении/удалении DOM? как заставить его воссоздать DOM?

Если у меня есть только код 1 внутри onClick(), то он будет воссоздавать два <li>, но я просто присваиваю этому значению this.objArr.

Если у меня есть только код кода 2 внутри onClick(), то он не воссоздает два <li>, а просто добавьте еще один <li>. Интересно, как ngFor определить, когда воссоздать DOM.

То, что я хочу сделать, это:

Если я просто нажать больше объект в существующий массив, как я могу позволить ей воссоздать существующий DOM для меня, кроме добавления DOM для толкаемого объекта? Как и в случае 2, я надеюсь, что ngFor может воссоздать первые два <li> для меня.

Html:

<button (click)="onClick($event)"></button> 
    <li *ngFor="let obj of objArr"></div> 

ts-файл:

constructor() { 
     this.objArr = [ 
        { 
         'id': 0, 
         'content': 'test0' 
        }, 
        { 
         'id': 1, 
         'content': 'test1' 
        } 
       ]; 
    } 

    onClick() { 
     // case 1: recreate two <li> 
     this.objArr = [ 
        { 
         'id': 0, 
         'content': 'test0' 
        }, 
        { 
         'id': 1, 
         'content': 'test1' 
        } 
       ]; 

     // case 2: just add one <li> after the two existing <li> 
     this.objArr.push({ 
      'id': '2', 
      'content': 'test2' 
     }); 


    } 
+1

вы можете использовать трубу для этого –

+0

@VinayPandya Можете ли вы объяснить более подробно на основе моего примера? –

ответ

3

Вы можете временно установить objArr обнулить и "сила" Угловое обновить DOM, вызвав detectChanges между ними:

constructor(private cdRef:ChangeDetectorRef) {} 

onClick() { 
    var tmp = this.objArr; 
    this.objArr = null; 
    this.cdRef.detectChanges(); 
    this.objArr = tmp; 
    this.cdRef.detectChanges(); 
} 
+0

Спасибо. В чем разница между 'this.objArr = null;' и 'this.objArr = [];'? Будет ли 'this.objArr = [];' просто сохранить исходную ссылку? –

+0

Изменение значения 'objArr' и работающего изменения обнаруживает силы' * ngFor', чтобы удалить все элементы и добавить их обратно делает '* ngFor' повторно добавлять их. –

+0

Я вижу. Спасибо за вашу помощь. –

 Смежные вопросы

  • Нет связанных вопросов^_^