alexandrsashin
Стрелочные функции не могут быть использованы как конструктор.
Denis
Потому что стрелочная функция
Denis
В стрелочных функциях this внешний
Denis
Вот иногда прям так и лезет в глаза как погоня за хайпом снижает продуктивность и качество кода
Denis
Понасмотрятся что везде в современном коде эти стрелочные функции
Denis
А в суть не вникнут
Denis
И баги плодят
Denis
Сорян за бомбежку)
Sasha
Так и есть на самом деле
Sasha
Я просто сейчас переделываю большой проект на компонентую архитектуру, чтобы постепенно перейти на >=2. Ну то есть в таком случае, я как контроллер на самом деле использую класс. Это удобнее и привычнее(я бэкендер). Просто решил проверить-потыкать различия между стрелочной/func и вот сразу увидел такую штуку.
Denis
Стрелочные функции полезны там где раньше приходилось юзать .bind()
Denis
Или кешировать this
Sasha
Ну насколько я понял, основная фишка - это захват родительского контекста в том числе
Denis
Чтобы через замыкание юзать
Denis
Ага, ну и то что они короче
Denis
И можно писать
Denis
(x) => x + x
Sasha
А у меня еще такой вопрос возник, архитектурный. Например у меня есть некая компонента с фильтрами, но в из-за верстача, нужно вставить два темплейта в разные места(иначе все поедет). Насколько это правильно? И какие есть уже паттерны для решения?
Denis
Сталкивался, говноедил с ng-if ибо времени было мало. Тоже бы выслушал как лучше
Sergey
не?
Sergey
Стрелочные функции полезны там где раньше приходилось юзать .bind()
не только. Стрелочные функции = функциональные выражения. Они призваны выполнять какое-то простое выражение (не кучу выражений) в контексте контекста в котором они были объявлены.
Sergey
идеально для различных map/reduce/filter/...
Sergey
numbers .map(n => n ** 2) .filter(n => someComplexFiltering(n)) .reduce((n, sum) => sum + n);
Sergey
ну то есть если пишется что-то типа () => {exp;exp;exp;} то это будет не так хорошо как просто вызов функции внутри простого выражения
Sergey
* вместо someComplexFiltering надо что-то типа isMatchingSomeComplexCondition
Sergey
что бы читалась эта штука красиво
Sasha
два одинаковых темплейта превращаются в один реюзабельный компонент
Не совсем. Попытаюсь обрисовать ситуацию. К примеру есть некая таблица, у нее есть фильтры. Часть из этого функционала находится например внутри таблицы, а сами они выбираются неким sidenav, который за пределами div'a в которой сама таблица. Ну и так как фильтрация очень сложная и там куча всего, есть смысл это выделить в отдельный компонент.
Sergey
то что люди их оверюзят я считаю плохо
Sergey
> Часть из этого функционала находится например внутри таблицы они пересекаются?
Sergey
ну мол в моем представлении фильтрация это одно, а отображение таблицы это другое
Sasha
Я имел ввиду немного другое, в плане верстача обстоит так(схематично): <div container> <часть функционала для фильтров(удалить, переместить и тд> <сама таблица отдельным компонентом> </div> <sidenav который так же является частью функционала для фильтров но он не должен быть в верхнем div>
Sasha
Ну то есть, как ты и сказал, тут контейнер подходит судя по всему
Sasha
Либо сделать две компоненты для sidenav и для chips. Но использовать они будут один сервайс
Sergey
не должно быть такого что 1 компонент = 1 сервис, связи могут быть всякими
Sergey
главное что бы компоненты сохраняли какую-то логическую завершенность, ну то есть были по максимому самодостаточными и не зависили от контекста
Евгений
Подскажите куда копать, есть ui-router, в html5 mode, настроенный на адреса вида http://exmple.ru/local/state (base: /) хочу сделать так, что бы если после решетки будет путь, то отображать его поверх текущиего стейта в модальном окне. по идее, в модальном окне всего лишь нужно <div ui-view="detail"></div> поместить, но как сделать, что бы туда отображался нужный стейт? Куда копать?
Serhii
Создай отдельный апп
Serhii
В нем создай конфигурацию юи роутера без хтмл мода
Serhii
Должен хавать только #
Serhii
Только прийдется руками забутстрапить вторую апп
Евгений
Точно. однако это выходит что я там не смогу обратиться к первому аппу и его директивам и сервисам, верно?
Denis
можешь сделать что-то вроде
Denis
angular.module('app', []) angular.module('app2', ['app'])
Denis
будут директивы и сервисы доступны все
Serhii
Обычно директивы и сервисы выносят в отдельные модули
Serhii
Common например
Serhii
Потому что подключать один ап в другой - глупо
Serhii
Может похерится все потому что в первом ап уже есть конфиг роутера
Serhii
Хотя, я не пробывал, но заучит не очень
Roman
Всем привет
Roman
Помогите разобраться с директивой, покажу в лс
Roman
Она готова, просто не знаю как с ней работать
Кирилл
Товарищи, столкнулся со следующей проблемой: Использую ui-router. Есть стейт (search) с дочерними стейтами (search.movies, search.actors). Все они используют один и тот же контроллер, подключаю через contoller as.Проблема в том, что когда захожу на один из дочерних стейтов, контролер инициализируется несколько раз: судя по всему сначала для родительского стейта, а потом для дочернего. А хотелось бы, чтобы он контроллер отрабатывал ровно один раз, на каком бы уровне вложенности я не находился. Как можно обойти такую проблему?
Eugene
на дочерних стейтах у тебя какой контроллер указан?
Кирилл
на дочерних стейтах у тебя какой контроллер указан?
Один и тот же контроллер для всех стейтов, и родительского, и дочерних
Eugene
он и так отработает
Eugene
один раз
Eugene
его не нужно указывать на дочерних
Eugene
и тогда решиться твоя проблема
Кирилл
и тогда решиться твоя проблема
Пробовал, но тогда при переходе на дочерний стейт контролер не отрабатывает. Возможно дело в controller as синтаксисе, из за чего какие нибудь объекты не видны вне своего контекста или типа того. Но все равно спасибо, попробую вечером еще раз эту схему проработать
Eugene
все так и должно быть, тебе скорее нужно пересмотреть архитектуру, котроллер отработает один раз, если ты пойдешь на дчерний сразу или на парент, но при переходе с парента на дочерний он не отработает - так устроен ui-router. А по объектам, возможно ты затираешь переменную используя controllerAs, но это нормально, лучше прокинуть данные сервисом или еще как, а не использовать парент скоуп, хоть он и будет доступен, если ты просто поменяешь названия в стейтах переменной которая используеться в controllerAs
Eugene
нет
Eugene
новый котноллер и контроллерсАС с другой переменной
Eugene
или вообще не испольовать контроллер в том дочернем стейте или другой
Evgeniya
Всем привет! #Вакансия #javascript Вакансии 2 — в Москве и в Казани. Усиливаем фронтенд разработку, поэтому ищу JS разработчика (React, Angular), верстки минимально. Работа в уютном офисе в задачи интересные, график гибкий, коллектив дружный. Подробнее о вакансиях https://hh.ru/vacancy/20345682 https://hh.ru/vacancy/20109325 Связь через лс или почту e.kikoina@youdo.ru
Serhii
Выезжаю
Dmitriy
ребят
Dmitriy
как в ng-class сделать alert-danger через дефис ругается парсер
Aleksei
эээ ng-class="{'alert-danger': condition}" ?
Aleksei
/
Aleksei
/stat@combot
Combot
combot.org/chat/-1001024737789
Кирилл
Возвращаясь к проблему с ui-роутером Если для стейтов-потомков не указывать контроллер, а указывать его только для родительского стейта, то первая инициализация проходит успешно и для родительского стейта, и для одного из стейтов потомка. Однако теперь такая проблема: при переходе между дочерними стейтами контроллер не отрабатывает. Переключение между этими стейтами происходит через ссылки с атрибутами ui-sref. То есть видимо надо как-то слушать событие переключение между стейтами и выполнять инициализацию. Подскажите, что я упускаю?
Кирилл
Либо сделать не через ui-sref, а повесить на ссылки отработку фунукции, которая будет делать $state.go и затем выполнение основной функции в контроллере?
Кирилл
Через ng-click работает: Внутри view: <a ng-click="searchCtrl.changeState('search.movies')">Ссылка на другой дочерний стейт</a> Внутри контроллера: vm.changeState = function(nextState) { $state.go(nextState, {value: vm.searchString}).then(function() { vm.searchInit(); }); Можно ли все таки это сделать как-то более лаконично, не через ng-click, а по-нормальному, через ui-sref? Чтобы при переходе между дочерними стейтами контроллер реиницилизировался? Или выполнялась конкретная функция, как в моем примере выше?