Angular: Можно ли сделать директивы Angular, такие как NgIf и NgFor, проверять переменные, к которым они привязаны, только тогда, когда я этого хочу? - PullRequest
0 голосов
/ 06 февраля 2020

Моя проблема

Из того, что я понимаю, директивы Angular работают, следуя ритму фреймворка LifeCycleHook.
Другими словами, они проверяются в определенное время в цикл, так что связанные значения проверяются несколько раз в секунду. Однако мне хотелось бы знать, можно ли было контролировать эти проверки.


Ситуация

Например, давайте представим, что у меня есть NgFor, связанный с массивом из 1000 объектов.
Что произойдет, если каждый Объект будет проверяться несколько раз в секунду. Это несколько тысяч проверок в секунду.
Но это не работает для меня. Это намного больше обработки, чем хотелось бы.

Меня интересует то, что мой NgFor проверяется только при инициализации моей страницы и при определенных действиях пользователя.


Мой вопрос и что я я пробовал

Так что мой вопрос:

Можно ли заставить директивы Angular, особенно NgIf и NgFor, больше не выполнять проверки после ритм LifeCycleHook и вместо этого выполнять проверки только тогда, когда я этого хочу? Или я должен сделать это, используя методы чистого HTML / CSS / Javascript?

Чтобы решить эту проблему, я уже изучил TrackBy. Однако это не меняет сути проблемы.
Будет выполнено несколько тысяч проверок. За исключением того, что они будут проверками значений, а не объектов.

1 Ответ

1 голос
/ 06 февраля 2020

Вы пытались использовать ChangeDetectionStrategy.OnPu sh?

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.html',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent implements OnInit {
  constructor(private changeDetector: ChangeDetectorRef) {
  }

  prop1: string;
  prop2: string;

  someMethod(): void {
    prop1 = 'abc';
    // *ngIf won't be checked yet
    prop2 = 'xyz';
    // nor here
    this.changeDetector.detectChanges();
    // now it will

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...