Кажется ошибка в переводе и неверный пример в "Меченые шаблонные строки". Реально добавлена поддержка теговых шаблонов в .html компонентов. В примере же чистый js, что работает уже давно.
Не понял также магии return void 0. Этот оператор давно существует в js и всегда возвращает undefined. Сейчас его использование как-то влияет на обработчик события, запрещая делать side-эффекты?
По поводу InjectFlags описание также сбивает с толку: они и так не работали с inject, а inject изначально существовал в виде, приведённом в примере.
Если поправить эти моменты, будет хорошая новость )
У домру ещё хлеще. Поддержка все нервы сожрёт, пока подтвердит отключение домашнего интернета. Спрашивают какой интернет будете подключать, сколько будете платить (если меньше, то начнут рассказывать сказки про замануху конкурентов и что цены у них самые объективные), потом 10 вариантов интернета по акции (скидка будет расти, срок - уменьшаться), и после мольбы одуматься все же отключают, если ты непробиваемый.
И чуть не забыл, перед этим отвечает бот, который ни в какую не хочет звать сотрудника, когда напрямую ему об этом говоришь. Отвечает в духе "давайте попробуем решить проблему без человека".
Как-то раз нарвался на мошенников и данная платформа по всем предоставленным данным о звонках с продавцом и полным перечнем характеристик устройства просто скидывала негативный отзыв, якобы за недостатком информации. У продавца при этом было больше сотни положительных отзывов. Решить вопрос в итоге удалось лишь через полицию, поймав продавца с друзьями под видом покупателей.
Может это лучше, чем ГДЗ, откуда просто списал и забыл :D
Конечно да, без помощника потом может и не смогут. Сколько видел разработчиков, использующих Copilot или аналоги на тех. интервью, все жмут кнопку и ждут пока оно решит что должно быть дальше написано. Кто хотел решить задачу, отключали или не обращали внимание, действуя до появления подсказок. А тут дети...
Судя по всему данный механизм введён просто из-за проблем реакции на изменения в effect, который вызывается не синхронно и пропускает все установленные значения в рамках одного синхронного куска кода и соответственно не обновляет зависимый сигнал (в примерах выше мы видим, что теперь такой проблемы нет). В общем расписать связку значений становится довольно мучительно. Мы в своём проекте решили, что signal будем использовать исключительно для тех данных, которые выводятся в шаблон. Но и это на самом деле не совсем решает проблему, т.к. приведение потоков к сигналами тоже работает не всегда как ожидается, т.е. например значение в сигнал может не попасть 1 раз 100 или вообще поток может преобразоваться в сигнал так, что значения не идут совсем. В таких случаях приходится переходить на новые решения, т.к. обернуть старое в toSignal = сломать.
Данный подход не совсем уместен, так как связывает руки в ряде случаев. Основное отличие интерфейса от типа в том, что интерфейс по сути является partial и мы можем расширить его нужной структурой не прибегая к оберткам и дополнительным типам. А типы в свою очередь поддерживают вычисления и типы-суммы.
Мы в работе используем иной подход разделения, когда контракты объектов данных и сервисов представляют из себя интерфейс, а типы используются для утилитарных, существующих только на клиентской части элементов, так как использование union и прочих сложных вычислений над типами сложно повторить в других ЯП (ОО). И конечно там, где функциональность интерфейсов не важна.
Увы, бывают такие моменты, когда ты зависишь от библиотеки соседнего отдела разработки, который делает непонятно что (а использовать ты обязан из-за политики организации) и ты стараешься это все как-то обернуть, чтобы было проще жить. Но каждое обновление (как правило неожиданное и с неизвестными изменениями) идешь править свой проект. И ничего с эти из-за организационной структуры не сделаешь ?
Ещё для решения задачи связки шаблона и компонента который его использует (шаблон передается в компонент через инпут) можно использовать hostDirectives, на контейнере, который соберет своих детей. А внутри компонентов уже можно без проблем обратиться к директиве контейнера и взять что необходимо. Конечно это хорошо работает, когда контейнер внутри себя имеет лишь одну подобную связку, иначе придется создавать дополнительные контейнеры. hostDirectives в данном случае избавит от необходимости каждый раз вешать директиву на компонент в разметке. А реализация подобного механизма связки через директиву даст простоту создания контейнеров. О проблеме применения директивы к нескольким связкам компонентов и шаблонов можно сообщать предупреждением или ошибкой с сообщением о необходимости разделения.
Затраты на итерацию. Движок должен "прыгать" по коду больше в случае нескольких итераций. Чтобы прочувствовать, можете реализовать while через goto в Pascal
Спасибо, хорошая и познавательная статья. Если поработать с библиотекой devextreme, то можно рассмотреть ещё больше примеров того, как сделать передачу данных в компонент в декларативном стиле и при желании переключиться на стиль "инпут с интерфейсом".
лично я всегда плююсь на работу с окнами в винде после мака сейчас в маке окна как в винде спокойно разворачиваются на весь экран без полноэкранного режима, очень просто сделать на половину экрана просто нужно навести мышь на зеленую кнопку и при необходимости зажать option по поводу просмотра всех открытых окон приложения: двойной тап двумя пальцами по трекпаду или magic mouse на иконке приложения в доке и как раз полноэкранного режима и не хватает в винде адекватного + разных рабочих пространств для каждого монитора кроме этого в маке могу переключать рабочие столы просто проводя двумя пальцами по мыши в нужном направлении
Кажется ошибка в переводе и неверный пример в "Меченые шаблонные строки". Реально добавлена поддержка теговых шаблонов в .html компонентов. В примере же чистый js, что работает уже давно.
Не понял также магии return void 0. Этот оператор давно существует в js и всегда возвращает undefined. Сейчас его использование как-то влияет на обработчик события, запрещая делать side-эффекты?
По поводу InjectFlags описание также сбивает с толку: они и так не работали с inject, а inject изначально существовал в виде, приведённом в примере.
Если поправить эти моменты, будет хорошая новость )
Тогда что-то типа чехла нужно, иначе угол подбирать придётся дополнительно )
У домру ещё хлеще. Поддержка все нервы сожрёт, пока подтвердит отключение домашнего интернета. Спрашивают какой интернет будете подключать, сколько будете платить (если меньше, то начнут рассказывать сказки про замануху конкурентов и что цены у них самые объективные), потом 10 вариантов интернета по акции (скидка будет расти, срок - уменьшаться), и после мольбы одуматься все же отключают, если ты непробиваемый.
И чуть не забыл, перед этим отвечает бот, который ни в какую не хочет звать сотрудника, когда напрямую ему об этом говоришь. Отвечает в духе "давайте попробуем решить проблему без человека".
Как-то раз нарвался на мошенников и данная платформа по всем предоставленным данным о звонках с продавцом и полным перечнем характеристик устройства просто скидывала негативный отзыв, якобы за недостатком информации. У продавца при этом было больше сотни положительных отзывов. Решить вопрос в итоге удалось лишь через полицию, поймав продавца с друзьями под видом покупателей.
Может это лучше, чем ГДЗ, откуда просто списал и забыл :D
Конечно да, без помощника потом может и не смогут. Сколько видел разработчиков, использующих Copilot или аналоги на тех. интервью, все жмут кнопку и ждут пока оно решит что должно быть дальше написано. Кто хотел решить задачу, отключали или не обращали внимание, действуя до появления подсказок. А тут дети...
Auto close tag и auto rename tag больше не нужны, из коробки работает. В чем отличие стандартных подсказок путей от path intellisense?
Судя по всему данный механизм введён просто из-за проблем реакции на изменения в effect, который вызывается не синхронно и пропускает все установленные значения в рамках одного синхронного куска кода и соответственно не обновляет зависимый сигнал (в примерах выше мы видим, что теперь такой проблемы нет). В общем расписать связку значений становится довольно мучительно. Мы в своём проекте решили, что signal будем использовать исключительно для тех данных, которые выводятся в шаблон. Но и это на самом деле не совсем решает проблему, т.к. приведение потоков к сигналами тоже работает не всегда как ожидается, т.е. например значение в сигнал может не попасть 1 раз 100 или вообще поток может преобразоваться в сигнал так, что значения не идут совсем. В таких случаях приходится переходить на новые решения, т.к. обернуть старое в toSignal = сломать.
Доступно скачивание с зеркал. Просто посмотрите адрес, с которого качается Intellij IDEA Community и по такому же качайте нужную IDE - все работает.
Данный подход не совсем уместен, так как связывает руки в ряде случаев. Основное отличие интерфейса от типа в том, что интерфейс по сути является partial и мы можем расширить его нужной структурой не прибегая к оберткам и дополнительным типам. А типы в свою очередь поддерживают вычисления и типы-суммы.
Мы в работе используем иной подход разделения, когда контракты объектов данных и сервисов представляют из себя интерфейс, а типы используются для утилитарных, существующих только на клиентской части элементов, так как использование union и прочих сложных вычислений над типами сложно повторить в других ЯП (ОО). И конечно там, где функциональность интерфейсов не важна.
Увы, бывают такие моменты, когда ты зависишь от библиотеки соседнего отдела разработки, который делает непонятно что (а использовать ты обязан из-за политики организации) и ты стараешься это все как-то обернуть, чтобы было проще жить. Но каждое обновление (как правило неожиданное и с неизвестными изменениями) идешь править свой проект. И ничего с эти из-за организационной структуры не сделаешь ?
Регулярка на проверку относительного пути неправильная совсем
Ещё для решения задачи связки шаблона и компонента который его использует (шаблон передается в компонент через инпут) можно использовать hostDirectives, на контейнере, который соберет своих детей. А внутри компонентов уже можно без проблем обратиться к директиве контейнера и взять что необходимо. Конечно это хорошо работает, когда контейнер внутри себя имеет лишь одну подобную связку, иначе придется создавать дополнительные контейнеры. hostDirectives в данном случае избавит от необходимости каждый раз вешать директиву на компонент в разметке. А реализация подобного механизма связки через директиву даст простоту создания контейнеров. О проблеме применения директивы к нескольким связкам компонентов и шаблонов можно сообщать предупреждением или ошибкой с сообщением о необходимости разделения.
Данный код не будет работать корректно, если элементы будут находится в разных контейнерах с position != static, т.к. координаты будут рассчитываться уже относительно родителя, а не документа.
https://stackblitz.com/edit/angular-ivy-hbzpmj?file=src%2Fapp%2Fapp.component.html,src%2Fapp%2Fapp.component.css,src%2Fstyles.css
Посмотрите на данный пример. Изменение у .item position со static на relative изменяет offset-ы дочернего элемента.
Затраты на итерацию. Движок должен "прыгать" по коду больше в случае нескольких итераций. Чтобы прочувствовать, можете реализовать while через goto в Pascal
Но тогда реализация нарушает постановку задач в движке js, т.к. promise создаёт микротаски, а не макро
Спасибо, хорошая и познавательная статья. Если поработать с библиотекой devextreme, то можно рассмотреть ещё больше примеров того, как сделать передачу данных в компонент в декларативном стиле и при желании переключиться на стиль "инпут с интерфейсом".
лично я всегда плююсь на работу с окнами в винде после мака
сейчас в маке окна как в винде спокойно разворачиваются на весь экран без полноэкранного режима, очень просто сделать на половину экрана просто нужно навести мышь на зеленую кнопку и при необходимости зажать option
по поводу просмотра всех открытых окон приложения: двойной тап двумя пальцами по трекпаду или magic mouse на иконке приложения в доке
и как раз полноэкранного режима и не хватает в винде адекватного + разных рабочих пространств для каждого монитора
кроме этого в маке могу переключать рабочие столы просто проводя двумя пальцами по мыши в нужном направлении
Еще можно описать вложенный класс, который будет иметь доступ к приватным значениям экземляров своего родителя. Конструкция:
static SubClass = class ... {}