Предварительный просмотр изображения с обнаружением изменений OnPush - PullRequest
1 голос
/ 25 мая 2019

Я хочу предварительно просмотреть несколько изображений перед загрузкой с помощью стратегии обнаружения изменений OnPush.

Я пытаюсь это https://stackblitz.com/edit/angular-mnltiv

Когда я добавляю OnPush, он перестает работать, я знаю, что я должен изменить массив неизменным образом, но не работает

import { Component, ChangeDetectionStrategy } from '@angular/core';
import { FormsModule } from '@angular/forms';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppComponent {
  urls = new Array<string>();
  detectFiles(event) {
    this.urls = [];
    let files = event.target.files;
    if (files) {
      for (let file of files) {
        let reader = new FileReader();
        reader.onload = (e: any) => {
          this.urls.push(e.target.result);
          this.urls = [...this.urls]
        }
        reader.readAsDataURL(file);
      }
    }
  }
}

Я ожидаю этого с OnPush https://stackblitz.com/edit/angular-4jmjzh

1 Ответ

1 голос
/ 25 мая 2019

вы должны активировать обнаружение изменений после обновления массива URL при использовании onPush

import { Component, ChangeDetectionStrategy, OnInit, ChangeDetectorRef } from '@angular/core';


constructor(private cdr: ChangeDetectorRef){}
...
detectFiles(event) {
this.urls = [];
let files = event.target.files;
if (files) {
  for (let file of files) {
    let reader = new FileReader();
    reader.onload = (e: any) => {
      this.urls = [...this.urls, e.target.result]
      this.cdr.detectChanges(); // add this and it should work 
    }
    reader.readAsDataURL(file);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...