Перечисленные ниже темы, связанные с AngularJS, часто всплывают в ходе интервью. Являетесь ли вы интервьюером или интервьюируемым, ознакомление с этими вопросами и ответами на них поможет вам подготовиться к собеседованию на позицию фронтенд-разработчика.
Для многих подобные интервью могут быть напряженными, но если не всем, то большинству придется пройти через это по крайней мере один раз за свою карьеру. Это коснется каждого, и бояться этого не стоит. Есть пара техник, позволяющих преодолеть свои опасения и сделать интервью скорее захватывающим чем пугающим жизненным опытом.
Пройдя через бесчисленное количество собеседований (по разные стороны стола), я бы сказал, что чем меньше вы готовитесь, тем более подготовленным будете. Это может звучать парадоксально, но послушайте меня. Если у вас есть настоящее знание предмета, вам нечего учить: когда вам зададут вопрос, ответ сам всплывет у вас в голове и вы сможете сообщить его своей аудитории.
Вот несколько полезных вопросов, которые могут быть заданы в ходе собеседований.
Что именно означает состояние формы «pristine»?
Когда что-либо является «pristine», это значит, что оно чистое. Нетронутое пользователем поле будет в своем чистом состоянии, а если оно изменяется, то становится «dirty», грязным. Удаление всего текста не сделает его снова чистым так как оно уже было затронуто. Это «чистое» состояние полезно для валидации формы, так как вам не нужно чтобы везде по умолчанию появлялась ошибка.
Что такое одноразовое связывание («One-time binding») :: и когда оно используется?
Когда вы вставляете выражение в начале шаблона с помощью ::, это называется одноразовым связыванием, которое позволит определить значение только один раз. Это может быть полезным когда вы уверены, что эти данные не изменятся в ходе сессии. В результате это может уменьшить дополнительные данные и улучшить производительность. В примере год привязывается к div.
Кратко опишите как в Angular работает digest-цикл
«Digest-цикл», также известный как «грязная проверка», это рекурсивный цикл, возникающий каждый раз при обновлении модели; если для разрешения всех привязок потребуется больше 10 циклов, проверка будет провалена. Несколько подходов необходимы потому что изменение в одной части может привести к эффекту домино выше по цепочке, где может быть больше изменений. После каждого digest-цикла DOM отражается с этими изменениями в модели.
Что такое и для чего используется «transclude»?
С точки зрения AngularJS, когда в отношении чего-либо употребляется термин «transclude», это означает, что это «что-то» допускает содержимое произвольной формы, которое может войти в компонент или директиву. Это обеспечивает гораздо большую гибкость когда компонент в основном используется в качестве контейнера. Одним из таких примеров может послужить панель, внутри которой может находиться что угодно. См. пример ниже.
<panel header="This is a header" text="Some text"></panel>
Другой способ сделать это – установить transclude = true; для этого вам понадобится элемент или атрибут ng-transclude. Тогда вы сможете просто сделать так:
<panel> <h2>This is a header</h2> <p>Some text</p> </panel>
Теперь ваш компонент гораздо более гибок, поскольку контент имеет свободную форму. У использования такого контента есть еще одно преимущество. Как с любой разметкой, у вас могут быть пользовательские директивы и компоненты, но контент все равно будет отображаться, в отличие от случая с помещением его в атрибуты.
Что такое внедрение зависимости и каковы некоторые из преимуществ его использования?
Компоненту не нужно знать, как была внедрена зависимость, для него важно, чтобы она была доступна к использованию в любое время. Внедрение зависимости может быть достигнуто просто путем использования правильного имени в аргументах метода, но если вы хотите уменьшить количество кода на выходе, она должна быть встроена в массив строк или использовать такие аннотации как ng-annotate.
Как вы видите, использовать любой доступный сервис очень просто. Тем не менее синтаксис может быть немного сложнее, когда вы минимизируете код.
Причина для встраивания зависимостей в массив строк в том что при минимизации аргументы искажаются, например превращаются в a и b или любые другие одиночные символы, что позволяет уменьшать размер файла. Из-за этого Angular не знает, что это за зависимость, так как ссылка на само имя потеряна. Чтобы справиться с этой проблемой был придуман такой умный ход как точные, никогда не изменяемые строки. Благодаря этому мы можем быть уверены, что встраивается нужная зависимость. В коде это выглядит повторением, но тут выступает ng-annotate.
И код становится гораздо чище, так как вам не приходится повторять массив строк с тем же именем. За дополнительной информацией обратитесь, пожалуйста, к репозиторию ng-annotate. Надеюсь, что информация была для вас полезной!
***
Подписывайтесь на наш канал в Telegram!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]