­
И нужно писать это новое на новом уже..
Sasha
https://tech.small-improvements.com/2017/01/25/how-to-migrate-an-angularjs-1-app-to-react/
Igor
Как лучше мигрировать с AngularJS на Angular? Сейчас на проекте мало того что нигде нет компонентов, так ещё и директив не много.
Модуль за модулем. У нас пока роутинг осуществляет первый ангуляр. Через даунгрейд заворачиваем и норм работает. Постепенно переходим
Igor
Кратко о себе. Работаю в компании Лига. AngularJS и Angular 5 . У нас как раз гибридное приложение, без всякий либ с магией, все руками делается.
Denis
для самых базовых вещей можно просто написать самому observable паттерн
Denis
https://gist.github.com/mak2xt/e6771ef65465b5f687277430f2a932d8
Denis
вот что-то такое
Denis
ObserverObservable это как Subject в RxJS
Иван
Во-первых, очень долго. Конечно 90% времени вы будете рефакторить ajs даже не заикаясь про а2+, но после момента принятия решения о переходе хочется, чтобы это побыстрее закончилось. Дальше большие проблемы с поиском аналогичных а2+ модулей уже использованных в ajs и выглаживание различий. Почти в 100% таких случаев вёрстка разлетается в щепки даже если библиотеки от одного производителя. Доставил проблем переход с ui-router-а на нативный ангуляровский, в какой-то момент первый просто отказался работать из-под даунгрейженых компонентов а2+ и гладкости не получилось, возможно мало копали (смотри п.1)...
Иван
Основная проблема, что сколько не планируй, сколько не готовься, всё равно всё пойдет наперекосяк. Чего-то не досмотрели, чего-то не учли, что-то не заработало как планировали
Eugene
Как лучше мигрировать с AngularJS на Angular? Сейчас на проекте мало того что нигде нет компонентов, так ещё и директив не много.
Переписать с 0 все, самый быстрый и верный способ миграции с первого ангуляра. Я бы взял Vue в место последнего 5го Angular, кто работал с первым, будет проще в адаптации. Но а если вы наоборот пришли на проект работая на Angular 2+, то я думаю очевидно будет взять его
Eugene
С нуля не вариант. Не дадут столько времени
Тогда я бы взял 100% Vue, и переписывал бы частями, благо Vue это позволяет сделать без каких либо проблем + прикрутить сразу TS на Vue и сразу заметите как все становится проще :)
Eugene
Почему vue а не react?
Ну потому что все такие Vue это не либа а Framework
Eugene
И базовые вещи есть от того же производителя :)
Eugene
И я реакт не люблю за его JSX, это ад, js + весртка
Dmitriy
О ребят, в скором времени будем переводить проект с спагетти Джнйкверри. И вот в команде мнения разошлись что брать в качестве инструмента для фронта
Dmitriy
И вот кто что посоветует?
Eugene
Я думаю либо ангуляра либо vue. Я бы взял Angular 5 :)
Eugene
Хотя react меня подкупает его React Native на перспективу
Dmitriy
и css
Ну компоненты вью тоже все в одном файле
pa[aad
Ну компоненты вью тоже все в одном файле
но не так же там именно css in js /* Thumbnail.css.js */ export default { image: { borderRadius: '3px' } } /* Thumbnail.jsx */ import styles from './Thumbnail.css.js'; render() { return (<img style={styles.image}/>) } /* Rendered DOM */ <img style="border-radius: 3px;"/>
pa[aad
верстальщики говорят wtf jsx, а потом еще wtf css in js как им быть, если еще и лоадер less / scss / sass жестяк
pa[aad
вот именно, там оно в style хоть как обычно
Константин
Забыл представиться, не хорошо Сейчас живу в СПб. Работаю в FirstLine Software фуллстек разработчиком с таким набором: mssql, Asp.NET 4.5, AngularJS, Bootstrap, Less Работаю на би-ту-би е-коммерс проекте #whois
Dmitriy
Тобишь топить за вью?
pa[aad
если бы дело не касалось ангуляра в целом я бы выбрал vue вместо react а так у меня only angular
nopefish
всем привет, наблюдаю странное - поставил ландшафтную ориентацию в хроме (iPhone 8) чтобы изменить ширину шапки, но оказалось что в такой ориентации ширина не равна высоте, она чуть меньше
nopefish
где это вычисляется?
nopefish
кто в курсе ? Медиа-запросом я не очень понимаю как это сделать, т.к. мне просто макс. ширина нужна, а девайсов много...
nopefish
нужна максимальная ширина
nopefish
в ландшафтной ориентации ) путано написал
nopefish
извиняюсь
Eugene
Это вопрос по верстке а не по Ангуляру
nopefish
разобрался, там масштаб менялся автоматом
Sasha
Такой кейс - есть некая форма, есть модалочки. У модалочек вложенность практически бесконечная. Есть какие-нибудь способы отключить вотчеры, которые находятся в parent'ах, помимо ng-if?
Sasha
в такой реализации что-то не то у тебя parent форма всегда открытая ?
Всегда открытая да, но данные оттуда чайлдам передаются по биндингам
pa[aad
а зачем тебе держать открытую модалку ? только ради биндингов ?
Sasha
а зачем тебе держать открытую модалку ? только ради биндингов ?
Нет, смотри. Есть форма, там есть какая-нибудь связь, типа one2many. То есть в определенном поле открывается еще форма в модалке, в этой мoдалке может быть еще поле o2m с модалкой. То есть получается у нас есть основная форма с вотчерами, когда открываем модалку - добавляются еще вотчеры и так до бесконечности
Sasha
one2many это не до бесконечности или у вас древовидная структура ?
До бесконечности конечно же. Допустим, есть поле с o2m, там внутри форма, в этой форме уже другое поле может быть с o2m, где тоже нужно открывать модалку.
Sasha
Это ерп и там все динамически
pa[aad
До бесконечности конечно же. Допустим, есть поле с o2m, там внутри форма, в этой форме уже другое поле может быть с o2m, где тоже нужно открывать модалку.
я вам предлагаю не держать все модалки открытыми, а управлять ими через сервис в сервисе хранить стек вызовов модалок открыто будет 5 модалок, при открытии новой все смещается, т.е. 1 удаляется, добавлется в конец новая а что бы не терять состояние модалок тоже в сервисе храните вообщем эта реализации будет сложнувата, но облегчит ваш процесс вложенности
Sasha
Sasha
На скрине - это не ангуляровское приложение, а десктопное
pa[aad
да, 5 модалок это текущие открытые ( типа текущий открытый стек ), а весь стек храните рядом просто при нужной модалке, вам нужно будет ее показать и передав ее состояние при этом сохранив ее позиционирование с помощью хранения z-index
Sasha
Ангулар, я думаю, на пятой модалке споткнется ) это же какой огромный дайджест там будет
Более того, там в каждом поле ng-required/ng-hide/ng-disabled с постоянно вычисляемым выражением.
Sasha
Каждое поле динамически зависит от других и вычисляется с помощью специальных выражений.
Bogdan
Более того, там в каждом поле ng-required/ng-hide/ng-disabled с постоянно вычисляемым выражением.
Вот кстати да, почему бы не хранить стэйты в стэке и по мере закрытия не возвращаться?
Bogdan
Скрытые компоненты не будут гнобить дайджест
Sasha
А в интерфейсе их скрывать ng-if'ом?
Bogdan
И вот тогда действительно можно очень глубоко в кроличью нору лезть
Bogdan
А в интерфейсе их скрывать ng-if'ом?
Само вью вообще убирать Это кастомную логику писать надо
Sasha
Насчет хранений стейтов по мере закрытия - это понятно. У меня скорее вопрос, как убрать из DOM'а. Насколько я понимаю, это единственный способ убрать вотчеры
Sasha
Имею ввиду специфичные, типа ng-required/...
pa[aad
$mdDialog из angular-material
свою будешь писать )
Sasha
А как можно оптимизировать выражения в полях? Потому что даже обычная форма работает достаточно медленно
Sasha
Я просто не понимаю причин, почему тормозит так. Может глупые вопросы задаю, я сам бэкенд/десктоп.
Bogdan
Скорее всего, дофигище вотчеров
Sasha
А я уже старался с оптимизировать количество вотчеров, соежу за ними. Где можно - ::, односторонние биндинги, но вотчеров на форме все равно 1500, а иногда и 1900
pa[aad
а ты вотчеры удаляешь когда событие $onDestroy эмитится в скоуп ?
Sasha
а ты вотчеры удаляешь когда событие $onDestroy эмитится в скоуп ?
Нет. Я даже и не думал, что это руками нужно делать
Sasha
По поводу выражений, например вот выражение для ng-disabled: const expr = { "s": [{ "__class__": "Not", "v": { "s2": "draft", "s1": {"v": "state", "d": "", "__class__": "Eval"}, "__class__": "Equal" } }, { "s": [{"__class__": "Bool", "v": {"v": "lines", "d": [0], "__class__": "Eval"}}, {"__class__": "Bool", "v": {"v": "party", "d": "", "__class__": "Eval"}}], "__class__": "And" }, {"__class__": "Bool", "v": {"v": "lines", "d": [0], "__class__": "Eval"}}], "__class__": "Or" };