Все, что вам нужно знать об обнаружении изменений в Angular. Упражнение

Как грамотно оценить коммуникабельность кандидатов на собеседовании? Давайте рассмотрим два кейса по оценке истинной коммуникабельности.

Качественное взаимодействие сотрудников - важный вопрос для любой организации. Хорошие коммуникативные способности помогают в любом деле. Однако в некоторых сферах, такие навыки совершенно необходимы для выполнения профессиональных обязанностей, а в некоторых нет. Например, работа финансового аналитика или бухгалтера, как правило, они не находится на виду, сотрудники редко их видят, поэтому навык общения у людей на этой должности не особенно влияет на результаты их работы. Зато тому, кто занимается продажами, маркетингом, PR, умение налаживать отношения с людьми необходимы в первую очередь.
Как грамотно оценить коммуникабельность кандидатов на собеседовании? Давайте рассмотрим две разные задачи для интервью.

Первая задача : оценить коммуникабельность, когда эта компетенция не есть профессиональной, а имеет определённые корпоративные требования ко всем категориям персонала в компании. На собеседовании необходимо исследовать, как человек взаимодействует в коллективе для определения совместимости с культурой компании, где коммуникабельность определяется как «стремление к долгосрочным партнёрским отношениям с другими людьми внутри и вне организации».

Вторая задача для интервью с кандидатами на должность, где эффективная коммуникация - это обязательный профессиональный навык, от которого зависит результат работы. Необходимо оценить степень развития у работника следующих способностей:

  • легко устанавливает контакт с незнакомыми людьми;
  • подстраивает свой стиль общения, учитывая особенности собеседника;
  • адекватно реагирует на мимику, жесты собеседника, делает паузы, поддерживает зрительный контакт;
  • общается вежливо, открыто;
  • говорит грамотно, тон уверенный (не агрессивный и не извиняющийся);
  • создаёт комфортную атмосферу общения.

Решение задачи № 1 - используем вопросы:
1. Если вас попросят выполнить работу, которая не входит в ваши функциональные обязанности, что вы ответите?
2. Как вы вели себя, обсуждая с начальником недовольство работой?
3. Расскажите мне о самом неприятном сотруднике. Каким образом вы общаетесь с ним? Как вы справлялись с этой ситуацией?

Отвечая на этот вопрос, кандидат может начать говорить совсем не то, что он делает, а немножко искажать действительность, ведь он хочет получить работу. Если вдруг, кандидат начинает описывать очень «сладко» своё поведение, примените провокацию - подыграйте, что Вы не согласны «Та ну, и зачем Вам это нужно? Он специально не делится информацией с коллегами / не выполняет свой кусок работы вовремя / (в этом месте назвать поступки того неприятного коллеги, о которых рассказал кандидат), а Вы «напрягаетесь», исправляете ситуацию. Вы же тратите рабочее время не на свои прямые обязанности \ или Вы покрываете нерадивость работника компании / поощряете непродуктивные действия сотрудника, ведущие к плохим результатам работы всего коллектива!»

И здесь, ловушка : будет кандидат придерживаться первоначального мнения или его менять и подстраиваться под намёк интервьюера, что вести нужно себя по-другому.

4. Расскажите о самом трудном случае общения с Вашим руководителем.
5. Опишите ситуацию, когда вы достигли желаемого результата, заранее рассчитав воздействие своих слов или поступков.
6. Что Вы делаете или говорите, чтобы создать хорошие деловые отношения?
7. Когда в последний раз коллега просил Вас о помощи?
8. Вспомните ситуацию, когда Вам требовалась помощь в решении важной задачи. К кому Вы обращались? Как выбирали нужного человека. Каким образом Вы попросили помощи?
9. Оправдались ваши ожидания? Как эта ситуация повлияла на ваши взаимоотношения с этим человеком?

Слушая рассказ, отслеживайте факты:

  • насколько кандидат восприимчив к чувствам и эмоциям других людей;
  • умеет ли строит и поддерживает доброжелательные, теплые отношения и контакты с людьми;
  • предлагает помощь коллегам и помогает, если есть необходимость;
  • мотивирует и поддерживает коллег, помогает им почувствовать свою силу и значимость.

И делайте провокацию, если интервьюируемый склонен к социально-желательным ответам.

Решая задачу № 1, помните: нет правильных или не правильных ответов кандидата. В данном случае важно определить совместимость способов коммуникации человека с требованиями корпоративной культуры компании.

Решение задачи № 2 - используем разные методы: кейсы и STAR-методику.

Кейс 1: «Представьте, что я Ваш потенциальны клиент. Расскажите мне о продукте, который продаёте/рекламируете/продвигаете».

Слушая кандидата, обращайте внимание:

  • Какая это презентация: сухая, «живая», имеет чёткую структуру?
  • Делает презентацию продукта/услуги, не втягивая Вас в диалог, не привлекает Вас к общение или наоборот, задаёт вопросы, активно реагирует на Ваши вербальные и невербальные проявления

Собеседуя кандидата на должность, связанную с продажами, отслеживайте степень владения способностями:

  • Насколько досконально знает особенности и свойства продукта;
  • Как отвечает на вопросы о продукте;
  • Рассказывая о продукте, использует формулу: свойства, преимущества и выгоды.

Кейс 2, «заезженный», и всё же очень эффективный: «Продайте мне….. (назовите любой предмет в комнате)».

Этим кейсом HR-ы часто пользуются, чтобы изучить активность кандидата, его энергетику, наличие «огня» в глазах, структуру и эмоциональность речи.

Я ещё предлагаю отслеживать следующие факты:

  • С чего начал? Задал нужные открытые вопросы?
  • Для более глубокого прояснения потребности клиента (т.е. Вас) задаёт уточняющие вопросы?
  • Активно слушает вас, уместно перефразирует (уточняет) Ваши выражения?

Если есть наличие этих факторов на хорошо развитом уровне, перед Вами Профессионал!

Вопросы по STAR-методике для оценки профессиональной компетенции «Коммуникабельность».

Как исследовать крупногабаритные образцы? Как улучшить качество изображения? Можно ли исследовать зерна на цифровом микроскопе?
Ответы на эти вопросы Вы найдете в нашей статье.
Сегодня наш инженер Петров Андрей расскажет о функциях цифрового микроскопа Keyence, которые пока не получили широкого распространения, но которые значительно облегчают жизнь пользователей.
  • При исследовании образцов больших размеров используйте специальные макрообъективы

    Если в работе с образцами Вам необходимо исследовать большие области, используйте специальные объективы. С макрообъективом VH-Z00T можно наблюдать области более 400 мм (по диагонали 15.75")


  • При исследовании крупногабаритных объектов используйте съемную камеру

    Микроскоп может выполнять наблюдения образцов, которые не помещаются на предметном столике. Съёмная камера позволяет легко наблюдать объекты любого размера или объекты, находящиеся в процессе изготовления на конвейерной линии.



  • Флюоресцентный микроскоп VH-Z500T Keyence можно использовать в качестве металлургического

    Серия микроскопов VH-Z500T, которые могут выполнять наблюдения при увеличениях до 5000x, отлично подходят для использования в качестве металлургических микроскопов.


  • Чтобы сделать изображение более четким, используйте функцию "Расширенная глубина резкости"

    Данная функция даёт возможность получить чёткое изображение даже для материалов с неровными отполированными поверхностями. Процесс сканирования и завершения обработки изображения занимает всего лишь несколько секунд.


  • Чтобы измерить площадь зерен, используйте функцию автоматического измерения площади

    Более того, функция автоматического измерения площади позволяет измерять размеры зёрен и их соотношение.


  • Чтобы наблюдать остаточные напряжения деформации, используйте поляризационные фильтры

    Для наблюдения остаточных напряжений требуется наблюдение через поляризационные фильтры с нижней подсветкой. Стойка микроскопа имеет встроенные поляризационные фильтры и поддерживает передаваемое освещение. Это дает возможность использовать как поляризационный микроскоп.



  • Для исследования тонких, едва различимых царапин на поверхности образца, используйте функцию ДИК - наблюдение c дифференциальной интерференционной контрастностью

    Серия микроскопов поддерживает наблюдение с дифференциальной интерференционной контрастностью. Просмотр интерференционного изображения, сформированного путем разделения оптического луча на два пучка света, позволяет наблюдать обычно невидимые тонкие царапины с высоким контрастом.



  • Если Вам необходимо исследовать труднодоступные места, используйте специальную узкую линзу микроскопа

    Линзы объектива могут быть до 1,8 мм в диаметре. Это позволяет наблюдать труднодоступные места оборудования без необходимости его разборки.




  • Есть вопросы? Звоните!
    Наш инженер Петров Андрей Григорьевич, который поделился с нами советами, о том, как еще можно использовать цифровой микроскоп Keyence , с радостью ответит на все Ваши вопросы!
    Тел. для связи +7 495 204-13-17, е-mail: .

Как провести опрос эффективности внутренних коммуникаций?

Сначала необходимо понять, для чего вам нужен этот опрос и что вы хотите измерить в конечном счете. Как правило, цели у такого рода опросов следующие:

Цели опроса эффективности внутренних коммуникаций:

  • Оценка эффективности и востребованности каналов.
  • Оценка уровня информированности сотрудников.
  • Выявление тенденций поведения и привычек работы с информацией.
  • Создание нулевого замера для работы с динамикой эффективности.
  • Оценка потенциала каналов коммуникации.

Шаг 1: Демография.

Аудиторию необходимо разделить по признаку «руководитель - сотрудник», стажу работы в компании, бизнес-функции, возраста, пола. Это необходимо, чтобы в последующем получать отчетность в удобном виде и сегментировать коммуникацию. Подробнее о сегментировании рекомендую почитать у Филиппа Котлера в его книге “Маркетинг по Котлеру”. Он там прекрасно описывает предмет коммуникации и сегментирования каналов коммуникации, и вообще, дает базовые знания о коммуникации бренда, очевидно необходимые при взаимодействии с аудиторией. Книга висит “вконтакте”, на ютубе - в общем, вы не потеряетесь.

Шаг 2: Вопрос внешних социальных сетей.

Поскольку ваши сотрудники ведут «двойную жизнь», они получают информацию о компании изнутри и снаружи. Необходимо понимать, какой социальной сетью они пользуются и подписаны ли они на компанию.

· Odnoklassniki

· (дополнительно tweeter, flickr, google+, livejournal, periscope…)

В какой из них вы подписаны на компанию?

Шаг 3: Вопрос мессенджеров.

Мессенджеры стали неотъемлемой частью нашей жизни, а коммуникация через мобильный телефон - самая эффективная. Вам необходимо не только понимать, каким мессенджером пользуются ваши сотрудники, но и используют ли они этот мессенджер для рабочих коммуникаций.

Каким мессенджером Вы чаще всего пользуетесь?

Какой из мессенджеров вы используете для рабочих коммуникаций? Как часто? Здесь можно указать несколько плюс частоту. В таких опросах ни в коем случае не используйте неконкретные формулировки ответа типа - очень часто/редко/часто; гораздо лучше давать варианты - не использую/ 1 раз в год/ 1 раз месяц/ 1 раз в неделю/ каждый день.

Шаг 4: Уровень информированности.

Первое, что вам необходимо понимать - это как быстро люди получают информацию, как быстро они узнают какую-то новость, если вы сделали рассылку или опубликовали ее на портале.

Вопросы исследования:

Какое устройство вы используете для получения информации о работе? Варианты ответа - не использую/пользуюсь каждый день/пользуюсь раз в неделю/пользуюсь несколько раз в день.

· Настольный пк

· Ноутбук

· Смартфон

· Планшет

Здесь помимо общего вопроса надо также задавать и второстепенные вопросы, связанные с конкретными проектами, важными для всей компании. Их можно перечислить с десятибалльной шкалой. Только не переусердствуйте. Вопросы типа «grid» очень плохо воспринимаются на глаз, когда вариантов рядом друг с другом более 6.

Далее, мы переходим к оценке частоты внутренних источников и их полезности для сотрудников. В результатах опроса сравнивайте частоту использования и «полезность» для сотрудника. Если сотрудники часто используют канал и говорят, что это бесполезно, вам нужно будет провести фокус-группы.

Из каких источников вы обычно получаете информацию о корпоративной жизни компании и как часто? Далее идет перечисление источников информации в вашей компании:

· Новостной портал

· Руководитель

· Дисплей

· Печатное издание

· Внешние источники (какие?)

10 баллов - Очень удобно и полезно, 1 балл - Абсолютно неудобно и совершенно бесполезно. Далее идет перечисление источников информации в вашей компании:

· Новостной портал

· Руководитель

· Дисплей

· Печатное издание

· Кадровые изменения

· Обращение первых лиц

· Социальные инициативы

· Творческие конкурсы

· Карьерные возможности

Расположите перечисленные ниже темы, как наиболее приоритетные для вас лично. Ранжирование - очень мощный инструмент, когда вопрос касается предпочтений.

· Кадровые изменения

· Информация о карьерном росте сотрудников

· Обращение первых лиц

· Социальные инициативы

· Творческие конкурсы

· Возможности для обучения и развития

· Информация о бизнес-результатах компании

· Карьерные возможности

В результате вы получаете исчерпывающую картину о проникновении основных каналов коммуникации и информированности сотрудников в организации. Результаты также подскажут вам способы улучшения текущей ситуации.

Проверочная работа включает в себя 18 заданий. На выполнение работы по физике отводится 1 час 30 минут (90 минут).

Прочитайте перечень понятий, с которыми Вы сталкивались в курсе физики.

Полёт самолёта, ампер, таяние льда, ньютон, электромагнитная волна, фарад.

Разделите эти понятия на две группы по выбранному Вами признаку. Запишите в таблицу название каждой группы и понятия, входящие в эту группу.

Выберите два верных утверждения о физических величинах или понятиях. Обведите их номера.

1. В лифте, движущемся вниз равноускорено из состояния покоя, стоит ящик. Модуль веса ящика равен модулю силы тяжести.

2. Ускорение - физическая величина, определяющая быстроту изменения скорости тела.

3. Сила трения скольжения зависит от площади соприкосновения бруска и поверхности.

4. Закон всемирного тяготения справедлив только для материальных точек.

5. Энергия связи ядра определяется величиной той работы, которую нужно совершить, чтобы расщепить ядро на составляющие его нуклоны без придания им кинетической энергии.

Показать ответ

Ракетка прогибается от удара по теннисному мячу. Под действием какой силы прогибается ракетка?

Показать ответ

Сила упругости

Прочитайте текст и вставьте пропущенные слова:

уменьшается

увеличивается

не изменяется

Слова в ответе могут повторяться.

Ракета стартует с земли и, разгоняясь, поднимается на небольшую высоту над земной поверхностью. Во время полёта кинетическая энергия ракеты __________. В это же время потенциальная энергия ракеты __________. Можно сделать вывод, что при старте ракеты её полная механическая энергия __________.

Показать ответ

увеличивается, увеличивается, увеличивается

Воздух в герметичном сосуде поместили в сосуд с водой и начали увеличивать объем. Как изменится масса воздуха, температура и давление в сосуде? Для каждой величины определите характер изменения и поставьте знак «V» в нужной клетке таблицы.


Показать ответ

Связанная система элементарных частиц содержит 8 электронов, 8 нейтронов и 8 протонов. Используя фрагмент Периодической системы элементов Д.И. Менделеева, определите ионом или нейтральным атомом какого элемента является эта система?

Показать ответ

Атом кислорода

На рисунках приведены спектры излучения атомарных паров водорода (1), гелия (2), натрия (3), смесь вещества (4). Содержится ли в смеси вещества водород, гелий, натрий? Ответ поясните.

Показать ответ

водорода (1), гелия (2), натрия (3) содержится в смеси вещества

Сколько времени потребуется нагревателю, сопротивление которого 10 Ом, чтобы произвести 250 кДж теплоты, если через него течёт электрический ток силой 10 А?

Запишите формулы и сделайте расчёты.

Показать ответ

Возможный ответ

Верно записана формула закона Джоуля - Ленца Q = I 2 Rt и получена формула для расчё­та времени t = Q/(I 2 R) = 250 000 Дж/(10 2 А 2 * 10 Ом) = 250 с.

Расположите виды электромагнитных волн в порядке возрастания их частоты. Запишите в ответе соответствующую последовательность цифр.

1) Ɣ-излучение

2) радиоволны

3) тепловое излучение

Ответ: _____ → _____ → _____

Показать ответ

С помощью вольтметра проводились измерения электрического напряжения. Шкала вольтметра проградуирована в В, Погрешность измерений напряжения равна 0,5 цены деления шкалы вольтметра. Запишите в ответ показания вольтметра в В с учётом погрешности измерений.

Показать ответ

Учащийся исследовал зависимость длины пружины L от массы грузов, лежащих в чашке пружинных весов. Какое значение коэффициента жесткости пружины он получил с учетом погрешностей измерений (\bigtriangleup m = ±1г \bigtriangleup L = ±0.2 см)?

Запишите в ответ показания барометра в кПа с учётом погрешности измерений.

Показать ответ

Вам необходимо исследовать, как зависит показатель преломления света от вещества, в котором наблюдается явление преломления света. Имеется следующее оборудование:

Лист бумаги;

Лазерная указка;

Полукруглые пластинки из стекла, полистирола и горного хрусталя;

Транспортир.

В ответе:

1. Опишите экспериментальную установку.

2. Опишите порядок действий при проведении исследования.

Показать ответ

1. Используется установка, изображённая на рисунке. Угол падения и угол преломления измеряются при помощи транспортира.

2. Проводятся два-три опыта, в которых луч лазерной указки направляют на пластинки из разных материалов (стекло, полистирол, горный хрусталь). Угол падения луча на плоскую грань пластинки оставляют неизменным, а угол преломления измеряют.

3. По формуле \frac{sin\alpha}{cos\beta}=n находят показатели преломления и сравнивают.

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

А) Лыжник, скатившийся с горки на горизонтальный участок, останавливается.

Б) Быстродвижущийся автомобиль не может сразу остановиться.

ФИЗИЧЕСКИЕ ЯВЛЕНИЯ

1) При скольжении одного тела по поверхности другого возникает сила трения скольжения.

2) Инертность тел.

3) При трении друг о друга двух тел происходит их электризация.

4) Сила тяжести всегда направлена к центру Земли.

Показать ответ

Прочитайте текст и выполните задания 14 и 15.

Принцип электрического нагревателя воздуха

Электрические нагреватели воздуха бывают четырёх основных типов: электрические конвекторы, инфракрасные обогреватели, масляные обогреватели и тепловентиляторы.

Мы поговорим только об одном из них - об электрическом конвекторе. Конвектор снабжён электрическим нагревательным элементом. Если специально подогревать воздух снизу, то он становится тёплым и перемещается наверх. На его место приходит порция холодного воздуха, который тоже нагревается и поднимается вверх. Это явление называется конвекцией. Его суть заключается в непрерывном перемещении воздушных масс из-за неравномерного нагрева различных слоев. Плотность воздуха зависит от температуры: чем теплее воздух, тем он легче. А по закону Архимеда все менее плотные тела в жидкости или газе всплывают наверх. Поэтому тёплый воздух всегда под потолком, а холодный - над полом. И так происходит до тех пор, пока весь воздух в помещении не станет примерно одинаковой температуры.

Установить нужную температуру воздуха в помещении можно с помощью рукоятки терморегулятора, установив её в положение, соответствующее определённой температуре.

Что же происходит дальше? Чтобы происходил нагрев, электрическая цепь конвектора должна быть замкнута. Терморегулятор должен размыкать её, если температура воздуха стала слишком высокой. Но при понижении температуры воздуха он должен автоматически замкнуть её снова, чтобы воздух продолжал нагреваться. Для этого терморегулятор оснащают подвижным элементом. Поворачивая ручку, мы меняем угол наклона этого элемента.

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

При разомкнутой цепи нагрев не идёт, поэтому воздух охлаждается. Пластинка на термодатчике тоже охлаждается и возвращается в исходное положение - к элементу терморегулятора, угол наклона которого задаёт пользователь. Цепь снова замыкается, и воздух нагревается.

Какое физическое явление лежит в основе действия электрического конвектора?

Показать ответ

Явление теплой конвекции

Выберите из предложенного перечня два верных утверждения и запишите номера, под которыми они указаны.

Наткнулся на хорошую статью об устройстве Angular"овского механизма обнаружения изменений (change detection). Т.к. тема достаточна важна, но при этом недостаточно глубоко раскрыта даже на англоязычных ресурсах, а найти русскоязычные материалы на эту тему, вообще, не представляется возможным, решил перевести данную статью.

Исследование реализаций, лежащих в основе и примеров использования

Если, подобно мне, Вы желаете исчерпывающе понимать механизм обнаружения изменений в Angular, Вам необходимо исследовать исходный код, поскольку в интернете недостаточно информации об этом. Большинство статей упоминают о том, что каждый компонент имеет свой собственный детектор изменений, который отвечает за проверку компонентов, но, фактически этим и ограничиваются, сконцентрировавшись на иммутабельности и стратегии обнаружения изменений. Данная статья предоставляет Вам информацию, которой достаточно для понимания почему работают примеры применения с иммутабельностью и как стратегия обнаружения изменений влияет на проверки. Также, информация, полученная из данной статьи, позволит Вам самостоятельно использовать различные подходы при оптимизации производительности.

Статья разбита на две части. Первая часть в достаточной мере техническая и содержит много ссылок на исходный код. Она детально объясняет как устроен механизм обнаружения изменений «под капотом». Её содержимое основано на новейшей версии Angular - 4.0.1. Реализация механизма обнаружения изменений в этой версии отличается от предыдущей 2.4.1. Если интересно, Вы можете немного почитать как работает предыдущая реализация в этом ответе на stackoverflow .

Вторая часть показывает как использовать обнаружение изменений в приложениях и её содержимое применимо и для предыдущей 2.4.1 и для новейшей 4.0.1 версий Angular, т.к. публичный API не менялся.

В руководстве к Angular постоянно упоминается, что приложение - это, по сути, дерево компонентов. Однако, «под капотом» Angular использует низкоуровневую абстракцию, называемую view (здесь и далее view будет использоваться без перевода). Есть прямая взаимосвязь 1:1 между компонентом и view - один view связан с одним компонентом, и наоборот. View содержат ссылку на связанный компонент в свойстве component. Все операции, такие как проверка свойств и обновление DOM осуществляют view, таким образом технически более верно рассматривать Angular как дерево view, тогда как компонент можно описать как высокоуровневое представление view. Вот какое описание view можно найти в исходном коде :

View - это основной строительный блок для UI приложения. Это минимальная группа элементов, которые создаются и удаляются совместно.

Свойства элементов View могут изменяться, но структура (количество и порядок) этих элементов - нет. Изменение структуры элементов может осуществляться только посредством вставки, перемещения либо удаления вложенныхх View через ViewContainerRef. Любой View может содержать много view-контейнеров.


В данной статье я буду использовать понятия компонента и его view взаимозаменяемо.

Есть две важные вещи обо view в контексте обнаружения изменений. Первая - каждый view содержит ссылки на дочерние view в свойстве nodes и, таким образом, может производить действия на дочерних view. Вторая - каждый view имеет состояние (свойство state), которое играет большую роль, потому как основываясь именно на его значении Angular принимает решение запускать ли обнаружение изменений для этого view и всех его дочерних, либо пропустить. Есть четыре возможных состояния :

  1. FisrtCheck
  2. ChecksEnabled
  3. Errored
  4. Destroyed
Обнаружение изменений не осуществляется для view и его потомков если аттрибут состояния ChecksEnabled установлен в false либо если view находится в состоянии Errored или Destroyed. По умолчанию все view инициализируются с ChecksEnabled, если не применяется стратегия onPush ChangeDetectionStrategy.OnPush. К этому моменту мы вернемся несколько позже. Состояния могут комбинироваться, например, view может иметь установленные флаги FisrtCheck и ChecksEnabled одновременно.

Angular имеет ряд высокоуровневых концепций для манипуляций view. Я описывал некоторые из них в этой статье . Одна из таких абстрактных сущностей - ViewRef . Она изолирует view компонента и имеет очень удачно названный метод detectChanges . Когда возникает асинхронное событие, Angular на ViewRef верхнего уровня, которые после запуска обнаружения изменений внутри себя, запускают обнаружение изменений у своих потомков .

Основная логика, которая отвечает за запуск обнаружения изменений для view, располагается в функции checkAndUpdateView . В основном её функционал производит действия над дочерними view компонента. Когда она вызвана для определенного view, она выполняет следующие операции в указанном порядке:

  1. обновляет входящие свойства у экземпляров дочерних компонентов
  2. обновляет состояние обнаружения изменений у дочерних view (как часть реализации стратегии обнаружения изменений)
  3. вызывает на дочерних компонентах хук OnChanges, в случае если связь изменилась
  4. вызывает хуки OnInit и ngDoCheck на дочерних компонентах
  5. вызывает хуки AfterContentInit, AfterContentChecked, AfterViewInit и AfterViewChecked на экземплярах дочерних компонентов
  6. вызывает хук OnDestroy, если дочерний/родительский компонент удален
  7. обновляет DOM для текущего view , если свойства экземпляра текущего view были изменены
  8. запускает обнаружение изменений для дочерних view
  9. отменяет проверки изменений для текущего view (если предустмотрено используемой стратегией)
  10. устанавливает значение false для флага состояния FirstCheck
Основываясь на вышеприведенном списке операций, хотелось бы обратить внимание на некоторые моменты.

Первое - это то, что хук onChanges вызывается у дочернего компонента перед тем как дочерний view проверен, он будет вызван даже в том случае, если обнаружение изменений на этом дочернем view будет пропущено. Это очень важно, и далее мы увидим каким образом мы сможем использовать это знание во второй части статьи.

Второе момент - обновление DOM для view - это часть механизма обнаружения изменений и происходит во время проверки. Это означает, что если компонент не проверен, его DOM не будет обновлен даже в случае, если свойства этого компонента используются в шаблоне отображения.

Еще одно интересное наблюдение - состояние view дочернего компонента может быть изменено во время обнаружения изменений. Ранее я упоминал о том, что все view компонентов инициализируются с установленным флагом ChecksEnabled по умолчанию, но для всех компонентов, которые используют стратегию OnPush, обнаружение изменений будет отключено после первой проверки (9-я операция в списке):

If (view.def.flags & ViewFlags.OnPush) { view.state &= ~ViewState. Это означает, что во время следующего запуска обнаружения изменений, проверка будет пропущена для view данного компонента и его потомков. Документация говорит нам о том, что компонент будет проверен только в случае изменений его связей (input-параметров) при использовании стратегии OnPush. Таким образом, для осуществления проверки следует установить флаг ChecksEnabled, что мы и видим в следующем коде (пункт 2):

If (compView.def.flags & ViewFlags.OnPush) { compView.state |= ViewState.ChecksEnabled; }
Состояние обновляется только в случае, если связи (входные параметры) родительского view были изменены и дочерний компонент был инициализирован со стратегией ChangeDetectionStrategy.OnPush.

Ну и в конечном счете, обнаружение изменений для текущего view отвечает за запуск обнаружения изменений у дочерних view (пункт 8). Здесь состояние view компонента проверяется и, если оно в статусе ChecksEnabled, то выполняется обнаружение изменений для этого view. Это отображает нижеприведенный код:

ViewState = view.state; ... case ViewAction.CheckAndUpdate: if ((viewState & ViewState.ChecksEnabled) && (viewState & (ViewState.Errored | ViewState.Destroyed)) === 0) { checkAndUpdateView(view); } }
Теперь мы знаем, что именно состояние view определяет будет ли выполняться обнаружение изменений на этом view и его потомках, или нет. Напрашивается вопрос - можем ли мы контролировать это состояние? Оказывается, да - мы можем, и именно об этом и будет вторая часть данной статьи.

Предположим, у нас есть следующее дерево компонетов:

Как мы выяснили ранее, каждый компонент связан с view. Каждый view инициализируется с установленным флагом ViewState.ChecksEnabled, чем определяется то, что при запуске Angular"ом обнаружения изменений, каждый компонент будет проверен.

Допустим, мы хотим отменить обнаружение изменений для компонента AComponent и его потомков. Это легко сделать - нам всего лишь следует установить значение false в аттрибут состояния ViewState.ChecksEnabled. Изменение состояния - это низкоуровневое действие, поэтому Angular предоставляет ряд публичных методов, который нам доступны у view. Каждый компонент может получить доступ к связанному с ним view посредством ChangeDetectorRef. Для Angular предоставляет следующий публичный интерфейс этого класса:

Class ChangeDetectorRef { markForCheck() : void detach() : void reattach() : void detectChanges() : void checkNoChanges() : void }
Давайте посмотрим, какую же пользу мы можем извлечь из него.

detach

Первый метод, который позволяет нам манипулировать состоянием - это detach, который попросту отменяет проверки на текущем view:

Detach(): void { this._view.state &= ~ViewState.ChecksEnabled; }
detach может быть применен в коде следующим образом:

Export class AComponent { constructor(public cd: ChangeDetectorRef) { this.cd.detach(); }
Этим мы обеспечим пропуск левой ветки во главе с AComponent во время последующего обнаружения изменений (компоненты, обозначенные оранжевыми цветом не будут проверяться):


Тут следует обратить внимание на пару моментов - во-первых, даже если мы изменим состояние только лишь AComponent, все его потомки также не будут подвержены проверкам. Во-вторых, пока обнаружение изменений не будет выполнено для левой ветки, DOM также не будет обновляться. Небольшой пример для демонстрации:

@Component({ selector: "a-comp", template: `See if I change: {{changed}}` }) export class AComponent { constructor(public cd: ChangeDetectorRef) { this.changed = "false"; setTimeout(() => { this.cd.detach(); this.changed = "true"; }, 2000); }
Во время первой проверки компонента содержимое span"а будет отображено как See if I change: false. По истечении двух секунд, когда свойство changed будет установлено в true, текст в span"е не изменится. Однако, если мы удалим строку this.cd.detach(), все начнет работать, как и ожидалось.

reattach

Как было сказано в первой части статьи, хук OnChanges все равно вызывается для AComponent, если входящее свойство aProp будет изменено в компоненте AppComponent. Это означает, что когда входящий параметр был изменен, мы можем активировать детектор текущего компонента для запуска обнаружения изменений и отключить его для последующего прохода. Именно это отображено в следующем коде:

Export class AComponent { @Input() inputAProp; constructor(public cd: ChangeDetectorRef) { this.cd.detach(); } ngOnChanges(values) { this.cd.reattach(); setTimeout(() => { this.cd.detach(); }) }
Так как, reattach просто устанавливает флаг ViewState.ChecksEnabled:

Reattach(): void { this._view.state |= ViewState.ChecksEnabled; }
это полностью идентично тому, что происходит, когда мы устанавливаем значение OnPush для ChangeDetectionStrategy: отменяем проверки после первого запуска обнаружения изменений, включаем когда связанное свойство родительского компонента было изменено, и заново отключаем после запуска

Важно взять на заметку, что хук OnChanges срабатывает только на компоненте верхнего уровня отключенной ветки, а не на всех компонентах этой ветки.

markForCheck

Метод reattach позволяет проверить только текущий компонент, но если обнаружение изменений отключено у родительского компонента, он не произведет никакого эффекта. Это означает, что метод reattach полезен только для компонентов верхнего уровня отключенной ветки.

Нам необходим способ включения обнаружения для всех родительских компонентов, вплоть до корневого компонента.



Похожие статьи

© 2024 parki48.ru. Строим каркасный дом. Ландшафтный дизайн. Строительство. Фундамент.