Dima
ну нажатие кнопки например
Dima
просто если в контроллере обьявлять, то наверное надо при $destroy чистить прослушку, а сервис же один раз инитится, думаю может принято в них делать
Rem1te
в темплейте нажатие кнопки
Dima
нажатие кнопки клавиатуры*
Rem1te
в компоненте в котором нужно обрабатывать
Алексей
Есть задача в зависимости от данных в scope показывать компонент(название компонента приходит из вне, может быть произвольным). Как бы вы решали эту задачу?
Stas
Всем здарасте. Подскажите есть чекбокс в репите если он по данным БД чекнут т.е. срабатывает ng-checked и я его анчекаю то в метод при клике отправляется undefined из за того что ng-model на сколько я понимаю не установлена никак при первоначальной инициализации, пробовал через ng-init но тоже почему то непоулчаю значение чекнутого чекбокса.
Stas
Rem1te
бля
Rem1te
мастер йода
Stas
оно может с бд прийти как и тру
Алексей
ng-if скорее всего тебе тут только поможет
не поможет, т.к. ng-if надо сравнивать с чем-то, а тут нет набора заранее известного.
Stas
смотря что ранее было сохранено
Rem1te
оно может с бд прийти как и тру
очень странно говорить о БД в чате про фронт :) не с БД а с бека :) и значит где-то значение должно хендлиться, а дальше тебе просто нужно поместить твое значение в переменную которая завязана на нг-модел
Алексей
оно может с бд прийти как и тру
ng-init не про состояние компонента, а про определение или изменение scope <input type="checkbox" ng-model="checkboxModel.value2" ng-true-value="'YES'" ng-false-value="'NO'"> попробуй по аналогии с примером https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D#examples . т.е. тебе не нужны ng-checked, ng-init
Rem1te
не поможет, т.к. ng-if надо сравнивать с чем-то, а тут нет набора заранее известного.
незнаю, возможно стоит покопать в сторону $compile, он может запустить компиляцию и обработку ивентов, а потом попробывать его заинжектить в реальный дом, но помоему ето не будет работать
Алексей
незнаю, возможно стоит покопать в сторону $compile, он может запустить компиляцию и обработку ивентов, а потом попробывать его заинжектить в реальный дом, но помоему ето не будет работать
будет, только вот думаю где это лучше делать. т.е. кажется правильным путём скомпилить в зависимости от входных параметров шаблон, привязав к нему нужный скоп.
Rem1te
дык что да, Вы можете создавать скоуп в компоненте и отдавать его на растерзания новому собранному компоненту
Sasha
Всем привет. Предположим, есть форма с 30 полями. У каждого из них есть динамическое выражение(или несколько): … x20 <field ng-disabled=“expression” ng-if=“expression” ng-required=“expression”/> Выражения резовятся и в итоге каждое поле динамически меняет свой статус, в зависимсти от данных формы. Это продуцирует какое-то нереальное количество вотчеров и все дичайше тормозит. Собственно вопрос: почему и как можно оптимизировать? p.s. подобная схема вполне нормально работает с вью или реактом, я проверил =)
Sasha
Скорее даже так: <field ng-disabled=“vm.resolve(expression)” ng-if=“vm.resolve(expression)” ng-required=“vm.resolve(expression)”/> И если посмотреть, то он дергает постоянно в этих местах дайджест, при том, что данные формы не менялись
Sasha
можно на момент инциализации создать объект, в котором посчитать все условия и потом завязываться на ссылки на значения объекта, не на выражения
А когда у нас данные поменялись, мы просто ‘пересобираем’ некий Map с выражениями и меняем значения переменных? Это как-то поможет в плане оптимизации? <field ng-disabled=“vm.statusMap.fieldName.isDisabled”/>
Алексей
Скорее даже так: <field ng-disabled=“vm.resolve(expression)” ng-if=“vm.resolve(expression)” ng-required=“vm.resolve(expression)”/> И если посмотреть, то он дергает постоянно в этих местах дайджест, при том, что данные формы не менялись
вообще должно помочь тем, что смотрим на скаляр, который не надо вычислять, т.е. у нас как минимум уходит оверхед на вызов функций
Rem1te
А когда у нас данные поменялись, мы просто ‘пересобираем’ некий Map с выражениями и меняем значения переменных? Это как-то поможет в плане оптимизации? <field ng-disabled=“vm.statusMap.fieldName.isDisabled”/>
нет, тогда уже не пересобираешь, а просто вычисляешь то что тебе нужно изменить, иначе в момент "пересбора" все будет дичайше лагать
Sasha
реакт и вью использует другую систему обработки изменений, у них нет дайджеста который парсит все дерьмо, Сколько вотчеров получается на 30 полей?
На больших формах с ~40-50 полями(это могут быть разные виджеты, но суть не меняется) примерно 2000 вотчеров. А если открыть модалку - собственно можно добраться до дикий значений и загрузки процессора с памятью.
Rem1te
у меня тут недавно на проекте было 70*12*4 полей и все с нг-моделами
Rem1te
я плакал, а заказчик сказал что пойдет
Rem1te
ну и я такой ¯\_(ツ)_/¯
Sasha
Ну то есть в рамках ангуляржс решения не существует?
Константин
Ну то есть в рамках ангуляржс решения не существует?
для начала поменяй функции на значения и проверь как оно)
Константин
у тебя не такие уж жесткие условия, не должно тормозить, рили)
Константин
В крайнем случае напиши директивы для полей, которые будут управлять их значениями по ивенам
Rem1te
Ну то есть в рамках ангуляржс решения не существует?
на двух тысячах я думаю нет как вариант отказываться от ангуляровской магии и описывать руками
Sasha
у тебя не такие уж жесткие условия, не должно тормозить, рили)
Условия жёсткие на самом деле, я просто описал схематично кейс. Формы динамические и может быть и 100 полей
Nikolai
и в этой записи ng-required с тем же значением, что ng-if лишнее
Sasha
ng-if можно на ng-show заменить
Дк это еще хуже наверное, из дома же не вырезается и обрабатываются другие условия в этом поле
Sasha
и в этой записи ng-required с тем же значением, что ng-if лишнее
Нет, там значения expressions совершенно разные для каждого тега
Sasha
field это компонент? ng-if создаёт скоуп
Да, компонент, который привязан в форме через require: {ngModel} и внутри инкапсулирована логика виджета или поля
Константин
Условия жёсткие на самом деле, я просто описал схематично кейс. Формы динамические и может быть и 100 полей
ну я просто сравниваю с нашим проектом. у нас на продуктах можно настроить кастомизацию в билдере, добавить форме пейджи, коллапсы и поля. Поля могут просто лежать, могут лежать в коллапсе и могут лежать в пейдже. Коллапсы могут просто лежать, могут лежать на пейдже. Ну и все в таком духе. Полей тоже может быть много. У них есть кондишены — строковые условия в стиле "показывать поле, если в <имя_поля> введено <значение>" и тд. Все это телегу он резолвит на ходу. Валидация тоже имеется, тоже с наворотами А еще есть external fetch, который из себя представляет настройку для полей, которая делает следующее — при изменении полей, у которых настроена галочка, нужно обратиться к серверу, он сходит по ссылке из настроек поля, заберет новые поля или настройки полей с из удаленного сервиса и вернет их фронту, который в свою очередь обновит форму И вся эта телега (кроме реквестов на бэк, которые по природе не сделать быстрее определенного порога) работает моментально
Константин
Думаю у нас с тобой примерно одинаковые кейсы, но у нас почему то вообще не лагает, а тебя прям тормозит
Константин
Значит вопрос в реализации, а не в ангуляре
Sasha
ну я просто сравниваю с нашим проектом. у нас на продуктах можно настроить кастомизацию в билдере, добавить форме пейджи, коллапсы и поля. Поля могут просто лежать, могут лежать в коллапсе и могут лежать в пейдже. Коллапсы могут просто лежать, могут лежать на пейдже. Ну и все в таком духе. Полей тоже может быть много. У них есть кондишены — строковые условия в стиле "показывать поле, если в <имя_поля> введено <значение>" и тд. Все это телегу он резолвит на ходу. Валидация тоже имеется, тоже с наворотами А еще есть external fetch, который из себя представляет настройку для полей, которая делает следующее — при изменении полей, у которых настроена галочка, нужно обратиться к серверу, он сходит по ссылке из настроек поля, заберет новые поля или настройки полей с из удаленного сервиса и вернет их фронту, который в свою очередь обновит форму И вся эта телега (кроме реквестов на бэк, которые по природе не сделать быстрее определенного порога) работает моментально
Да у меня тоже есть хуки, которые делают запросы к бэкенду при определенных условиях и меняют значения полей
Nikolai
Да, компонент, который привязан в форме через require: {ngModel} и внутри инкапсулирована логика виджета или поля
как сказали, не делать вызов функций в шаблоне vs-repeat по возможности in-viewport
Sasha
Я попробую это сделать, посмотрим, как себя поведет
Константин
Да, как сказали выше, n-show вместо ng-if действительно делает все быстрее
Sasha
Да, как сказали выше, n-show вместо ng-if действительно делает все быстрее
А у вас получается статус поля смотрит в переменную?(как я описал)
Константин
где как
Константин
сейчас гляну интересные моменты
Константин
у нас еще вот какой прикол: кастомизация продукта может быть создана как форм-билдером (самописным), так и обычным html. но чтобы он работал с ангуляровским контроллером на самом продукте — нужны директывы. В итоге у нас для каждого "бизнес" аттрибута полей есть директива, которая отправляет значение в контроллер
Константин
собственно это еще сильнее все усложняет, но тем не менее ничего все равно не глючит :D
Sasha
Ну у меня так же, просто это компонент, который всю логику внутри инкапсулирует и цепляется в форме
Константин
Ну у меня так же, просто это компонент, который всю логику внутри инкапсулирует и цепляется в форме
Вот так выглядит разметка полей, которые рисуются из данных от формбилдера. тут еще razor синтаксис (.cshtml вьюхи из asp.net), но думаю будет понятно на интуитивном уровне
Константин
Недавно заказчик прислал хорошую новость о том, что html кастомизаций на проде больше нет, и скоро будет выпилитьвать эту дичь с директивами для аттрибутов — будем все по человечески делать через ангуляр
Константин
Константин
А на контейнер для этого поля вешается ng-show="setShowCondition('@(Model.Name)')"
Константин
который чекает по так называемой condition string условия для показа/скрытия исходя из значений других полей
Sasha
Кейсы практически 1 в 1. У меня так же есть и скрываемые секци, в зависимости от данных формы. И формы генерируются на бэке
Константин
Да, действительно похоже на то, о чем ты говоришь Собственно я это все описал для того, чтобы подтвердить то, что формы могут быть нагруженными, но работать адекватно
Константин
И вроде у нас нет никакого дрочева производительности Зато есть жирнющий контроллер, который давно пора покромсать, ибо там уже неадекватно много кода)
Sasha
Вот еще вопрос созрел, в тулзах для проверки вотчеров - больше всего отжирает ‘fn’. Что это вообще?
Константин
Думаю, это обертка какая-то
Константин
что-то подкопотное
Sasha
Ну как?
Пока еще руки не дошли, по бэкенду таски доделываю =)
Nikolai
Ну хорошо. Кто комбинировал драгендроп-сортировку с виртуальным скролингом?
Алексей
С наступающим! Как сделать так, чтобы шаблон ком понента заменил директиву, не падал внутрь
Rem1te
никак, это было возможно только на директиве и это теперь незаконно
01
Ребята, ни у кого не было проблем с установкой Angular Cli? Пробую поставить это плюху, но npm бросается ошибками EISDIR. -- Вот так пытаюсь поставить. sudo npm install -g @angular/cli -- Лог ошибок огромный. Как пример: npm WARN tar EISDIR: illegal operation on a directory, open '/tmp/npm-20299-55aa9c6e/unpack-08b661a4/build/Release/obj.target' npm WARN tar EISDIR: illegal operation on a directory, open '/tmp/npm-20299-55aa9c6e/unpack-08b661a4/build/Release/obj.target/fse' -- Происходит эта беда именно когда я пытаюсь глобально установить Анг. При этом другие модули npm без проблем ставит. -- Версии софта node v8.12.0 npm 6.5.0