
abc
25.09.2016
22:05:52
Как у второго ангуляра с рендерингом? Если сравнить по скорости м реактом

Lends
25.09.2016
22:13:21
https://rawgit.com/krausest/js-framework-benchmark/master/webdriver-ts/table.html
тут правда старый ангуляр

Alexey
26.09.2016
05:41:12
@injectable ничего не знает про наследования и магии никакой для этого там нет, нужно руками super() дергать и туда передавать все что нужно

Google

Dima
26.09.2016
06:43:29

Alexey
26.09.2016
06:54:27
Не совсем понимаю зачем тебе такое могло потребоваться, это можно отдельно обсудить. Есть 2 решения в лоб

Алексей
26.09.2016
06:54:39

Alexey
26.09.2016
06:56:33
1) Model не injectable, и ты ему всегда сам передаёшь в конструктор все зависимости, как их получить в том месте где ты создаёшь инстанс - твои проблемы
2) сделать injectable сервис ModelFactory, со всеми зависимостями и реализовать статический метод ModelFactory.new()
Он будет создавать инстанс Model, прокидывать в конструктор все зависимости и возвращать этот инстанс
Но мне почему то кажется что ты изначально задачу неправильно поставил
Ты хочешь видимо объединить модель и http для неё в одном классе
Типа как в rails модели active record.
Но так делать не надо

Dima
26.09.2016
07:02:53
с рельсами не знаком, но похоже что да, именно это и хочу сделать. Наседовать модель от транспорта. Почему так делать не нужно?

Alexey
26.09.2016
07:06:37
Потому что модель это просто данные её я бы советовал использовать только для отображения. А вся бизнес логика, т.е взаимодействие с API по http должна быть отдельно реализована в сервисах
Пример - юзера

Google

Dima
26.09.2016
07:07:17
это вы говорите о viewModel - я хотел нечто другое

Alexey
26.09.2016
07:07:20
Ты делаешь обычный класс User , не injectable

Dima
26.09.2016
07:07:28
как раз бизнесс-модель

Alexey
26.09.2016
07:07:35
И отдельно UserService
Не должно быть понятия бизнес модель, есть сервисы
Для этого
И они синглтоны
Зачем их плодить инстансами?

Dima
26.09.2016
07:11:47
в идеале их и не буду плодить, все в транспорте, а модели уже отличаются

Алексей
26.09.2016
07:11:57
User и UserService - way to go.

Dima
26.09.2016
07:12:32
Я так на 1м писал, и это не особенно удобно. Есть подходы лучше

Alexey
26.09.2016
07:13:57
Приведи пример кода тогда с подходом получше

Dima
26.09.2016
07:17:32
это уже философия ))) транспорт на самом деле один - в вашем подходе как раз плодятся транспорты для каждой модели, когда должны плодится настройки одного и того же транспорта.

Алексей
26.09.2016
07:17:46

Dima
26.09.2016
07:18:46
в основном, да, ngResource использовал. RestAngular не зашел
но это как раз то, как я делать больше не хочу

Alexey
26.09.2016
07:30:27
там вся логика по работе с Http
плодятся чистые view-классы User без DI

Dima
26.09.2016
07:31:04
так моделей же много и для каждой свой транспорт.

Google

Alexey
26.09.2016
07:31:18
нет
не нужен для каждой свой транспорт

Dima
26.09.2016
07:31:47
я имею ввидку не инстансов User<
а разные классы моделей. Обычно кроме логинки есть еще что-то
User -> UserService, Address -> AddressService

Alexey
26.09.2016
07:33:04
конечно, UserService для работы с rest сущностью /users, ArticleService для работы с /articles
что с этим не так?

Dima
26.09.2016
07:33:14
можно наследовать все сервисы от отдого траспорта, но я хочу еще больше
то, что транспорт по сути один и меняется только урла

Alexey
26.09.2016
07:34:28
ты ошибаешься, не надо делать один GodHttpService который отвечает за все
дальше я дискутировать даже не буду
тут нет предмета для дискуссии

Dima
26.09.2016
07:36:11
ну нет так нет

Alexey
26.09.2016
07:36:15
ты сам придумал этот паттерн?
или где-то увидел?

Dima
26.09.2016
07:40:22
Моделей с транспортом? Бэкбон, экста, ember data. Active records вы же сами привели в пример. Паттерн сервисов на средненьком проекте разросся в штук 30 классов для работы с апишкой.

Alexey
26.09.2016
07:51:12
ну мотивацию я вашу понял, и если у вас действительно прям везде одинаковый стандартный CRUD без излишеств может быть в вашем частном случае это и будет оправдано

Ilya
26.09.2016
07:51:13
Relay тыкали?:)

Alexey
26.09.2016
07:51:28
я же пытался рассуждать обобщенно
у меня часто бизнес логика сильно отличается у разных сущностей

Google

Alexey
26.09.2016
07:54:29
чтобы немного сократить кол-во сервисов я вложенные ресурсы часто держу в одном сервисе, /deals/ и вложенные deals/:dealId/runs у меня в одном сервисе например
ну и модели Deal и DealRun в одном файле иногда держу если они маленькие

Dima
26.09.2016
07:58:31

Ilya
26.09.2016
08:00:06
Сам подход я имею в виду и релей и редакс никак не связаны

Алексей
26.09.2016
08:02:53
если в кратце лучше создать BaseModel у которой будет приватный HttpManager и унаследоваться от нее


Dima
26.09.2016
09:41:55


Алексей
26.09.2016
09:42:47
А так как httpManager это всего-лишь свойство в BaseModel то все будет вполне логично

Dima
26.09.2016
09:44:06
так легче ж не станет, в его super нужно будет передавать обязательные параметры. Это не очень гуд.

Igor
26.09.2016
09:44:13
https://www.illucit.com/blog/2016/03/angular2-http-authentication-interceptor/
вот тут расписано, как от Http отнаследоваться

Artem
26.09.2016
09:44:25
Привет. Такой вопрос: делаю
// route — это ActivatedRoute
this.route.queryParams.subscribe((params) => { console.log(params); });
перехожу на урл с ?q=12
в итоге в консоль валятся 2 сообщения:
{} и {q: '12'}
И я не понимаю, почему не просто {q: '12'}. И вообще, ошибка ли это в моём коде или в коде ангуляра.
Кто-нибудь сталкивался с таким поведением?

Dima
26.09.2016
09:45:27
точнее он не понимает, что в конструкторе у нас DI и в супер ничего передавать не нужно

Алексей
26.09.2016
09:46:58

Artem
26.09.2016
09:49:36
тогда мне нужно как-то проигнорировать {} при подписке, если после него придёт { a:1 }.
а если не придёт, то не игнорировать.
сложновато.

Google

Алексей
26.09.2016
09:57:35
а если не придёт, то не игнорировать.
сложновато.
обычно пишут так ( ибо всеравно в приложении нужна валидация параметров )
ngOnInit() {
this.querySub = this.router.queryParams.subscribe(queryParams =>
this.queryParamaterValue = queryParams["queryParameterName"];
if (isValidQueryParameter(this.queryParameterValue)) {
// ...
}
);
}
isValidQueryParameter(param) {
return param != null
}
ngOnDestroy() {
if (this.querySub) {
this.querySub.unsubscribe();
}
}

andretshurotshka?❄️кде
26.09.2016
09:58:54

Алексей
26.09.2016
10:00:15

andretshurotshka?❄️кде
26.09.2016
10:01:19

Dima
26.09.2016
10:02:11

Алексей
26.09.2016
10:02:57
rxjs fromArray
** DEPRECATED ** ( use "from" instead ) и мне кажеться не очень подходит.. хотя могу быть неправ

Vladimir
26.09.2016
10:05:56
А есть в TS'е эдакий ObservableCollection как в шарпе?
Чтобы бросалось событие, что объект внутри коллекции изменен?


Artem
26.09.2016
10:06:05
обычно пишут так ( ибо всеравно в приложении нужна валидация параметров )
ngOnInit() {
this.querySub = this.router.queryParams.subscribe(queryParams =>
this.queryParamaterValue = queryParams["queryParameterName"];
if (isValidQueryParameter(this.queryParameterValue)) {
// ...
}
);
}
isValidQueryParameter(param) {
return param != null
}
ngOnDestroy() {
if (this.querySub) {
this.querySub.unsubscribe();
}
}
ага. ну, у меня что-то наподобие этого, только без валидации пока. тоже подписка в ngInit и unsubscribe в ngDestroy.
Тут дело в чём, собственно: я делаю аутентификацию через OAuth2.
1) Ангуляровское приложение смотрит в localstorage, есть ли там токен и не просрочен ли он.
2) Если токена нет, делает редирект к провайдеру.
2) Провайдер аутентифицирует пользователя, редиректит обратно, code засовывает в url.
3) Ангуляровское приложение смотрит в queryParams, если там есть code, через ajax получает токен у провайдера. PROFIT.
Ну так вот. На третьем этапе, если queryParams пустые, приложение снова пошлёт пользователя к провайдеру за кодом. И мы вывалимся в циклическое получение кода у провайдера.
А отфильтровать я не могу, поскольку тогда процедуру аутентификации автоматом при входе в приложение вообще не запустить: ничего попросту не будет срабатывать при пустых параметрах.


Vladimir
26.09.2016
10:06:52
т.е. грубо говоря, у меня есть некий bool в классе, который при изменении должен вызвать метод перерасчета высоты другого контейнера

Artem
26.09.2016
10:06:57
Итого, выхода два: либо кнопочку поместить, которая процесс аутентификации запускать будет, либо запускать аутентификацию не редиректом, а в отдельном окне.
Поэтому мне так хочется от роутера, чтобы он не слал пустой объект в случае, и когда есть параметры, и когда их нет.

Алексей
26.09.2016
10:10:25

Vladimir
26.09.2016
10:11:25
при сворачивании/разворачивании задачи нужно пересчитать позиции нижестоящих элементов(для правого контейнера)
можно конечно просто событие кидать из одного контейнера, в котором я обрабатываю собыия сворачивания

Алексей
26.09.2016
10:13:03
Эта группа больше не существует