Обнаружение изменений триггера в приложении Angular IVY

До IVY мы могли инициировать обнаружение изменений, как это, на основе этого потрясающего ответа SO:

ng.probe(getAllAngularRootElements()[0]).injector.get(ng.coreTokens.ApplicationRef).tick()

Теперь вопрос в том, как нам добиться этого в Ivy?

При запуске в режиме разработки и вводе ng в консоли показывает это:

введите здесь описание изображения

Но я не уверен, как использовать это для обнаружения изменений в корневом элементе?

обходной путь

Внедрив ChangeDetectorRef в данный компонент, я могу сделать следующее (где $0 — ранее выбранный элемент в инструментах разработчика):

ng.getComponent($0).changeDetectorRef.detectChanges()

А это не для корневого компонента?


person DauleDK    schedule 05.12.2019    source источник


Ответы (1)


Ты можешь позвонить

ng.markDirty($0)

Где $0 — это выбранный элемент на панели devtools.

В v9 это метод applyChanges.

person undefined    schedule 05.12.2019
comment
хорошо, поэтому при программном выполнении вам нужно будет сначала запросить корневой элемент, а затем markDirty? Запускает ли markDirty changeDetection или только помечает компонент для обнаружения изменений при следующем запуске? - person DauleDK; 05.12.2019
comment
Он принимает компонент и запускает обнаружение изменений. - person undefined; 05.12.2019
comment
Я только что обновился до Angular v9 и не могу найти метод markDirty? - person DauleDK; 08.02.2020
comment
нг.applyChanges() - person undefined; 08.02.2020
comment
В настоящее время этот ответ stackoverflow имеет высокий рейтинг для ng.applyChanges и не очень хорошо объяснен вообще в документах Angular. Таким образом, для таких людей, как я, которые только что нашли ng.applyChanges(), выдается ошибка утверждения - вы должны предоставить компонент. ng.applyChanges(ng.getComponent(temp1)), где temp1 — элемент DOM. Вы можете щелкнуть правой кнопкой мыши узел app-mycomponent в Chrome и выбрать Store as global variable, чтобы назначить temp1 компоненту, уже находящемуся на странице. - person Simon_Weaver; 19.02.2020