Size: a a a

Angular - русскоговорящее сообщество

2019 December 19

EK

Eugene Kalashnikov in Angular - русскоговорящее сообщество
Ну в примере у @thekiba они в ./src/lib/shared/
источник

G

Galeups in Angular - русскоговорящее сообщество
тут интерфейсы устаешь клепать, а тут еще абстракции надо будет ))))
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Galeups
да, неправильно выразился. А как это тогда оформляется в файловой структуре? все абстракции кладутся в отдельную папку? 😊
Да, они должны лежать отдельно от реализации. Например:
— если мы будем ссылаться на отдельный каталог, где у нас лежат все абстракции,
— и если мы не будем ссылаться на реализацию
то модули, которые зависят от конкретного модуля, ничего о реализации знать не будут.

Это позволит нам иметь слабое зацепление и сильную связность, что сделает модули независимыми от того, что находится внутри. Это дает возможность менять реализацию, если это требуется, полностью реструктурировать все, и у нас не возникнет с этим проблем.

Это можно сравнить с замком и ключом. Ключ открывает замок, потому что он двигает сувальды. Мы всегда можем сделать новый ключ или повесить его на новый брелок, и при этом он все равно будет открывать замок.
источник

С

Степан in Angular - русскоговорящее сообщество
Вопрос есть на счёт практической части, кто как считает лучше сделать?  То как я сделал мне кажется слишком примитивно. В общем, есть 10 таблиц, за данные в каждой таблице отвечает отдельный ендпоинт, нужно на одной странице вывести эти 10 таблиц одновременно либо их часть в зависимости какую/какие таблицы захочет увидеть пользователь отмечая чекбоксом и нажатием на кнопку «получить» при этом каждое обращение к ендпоинту может иметь свои параметры типа даты или ещё чего либо, тоже пользователь может выбирать перед тем как нажать на кнопку «получить». Я сделал это двумя массивами, первый отвечает за название чебокосов и параметров request, в который в будущем я буду присваивать обращение к ендпоинту с другого массива, где эти обращения лежат в строгой  последовательности. Так как строгая последовательность в массивах мне не нравится, мне кажется что есть более гибкий и лучший способ как такую задачу реализовать
источник

E

Eugene in Angular - русскоговорящее сообщество
Вертихвост キバ
Это просто контракт, когда мы хотим четко обозначить методы, которые должны быть доступны, и которые мы можем вызывать. Например, если это сервис с модалками, то в абстракции будет Открыть модалку и Закрыть модалку.

У меня есть вот такое под рукой. MessageBus говорит, какие методы должны быть реализованы:
https://github.com/thekiba/angular-platform-cloud/blob/master/projects/platform-cloud/src/lib/shared/message-bus.ts

ServerMessageBus и BrowserMessageBus реализуют эти методы вот тут:
https://github.com/thekiba/angular-platform-cloud/blob/master/projects/platform-cloud/src/lib/server/server-bus.ts
https://github.com/thekiba/angular-platform-cloud/blob/master/projects/platform-cloud/src/lib/browser/browser-message-bus.ts

А дальше взаимодействите происходит через абстракцию. Вот тут мы говорим, что хотим получить MessageBus:
https://github.com/thekiba/angular-platform-cloud/blob/master/projects/platform-cloud/src/lib/server/server-renderer-adapter.ts#L18

И мы знаем, что у него будут только два метода, поэтому можем использовать только их, и вот один из них:
https://github.com/thekiba/angular-platform-cloud/blob/master/projects/platform-cloud/src/lib/server/server-renderer-adapter.ts#L138
Как тут лайк поставить ?)
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Galeups
блин, вот еще ни разу не реализовывал всякое наследование от компонентов и сервисов
И пару слов про наследование не абстрактых классов. Так делать никогда не стоит. И есть простая методика, как можно без наследования реализации расширять реализацию. Такой способ называется делегирование, тут можно почитать подробнее:
https://refactoring.guru/ru/design-patterns/proxy

Вот тут есть небольшой пример:
https://github.com/angular/angular/blob/master/packages/platform-browser/animations/src/animation_renderer.ts#L131

BaseAnimationRenderer реализует Renderer2, и приэтом в конструкторе он тоже принимает Renderer2.

Вот тут он делегирует вызов метода в Renderer2, и в engine:
https://github.com/angular/angular/blob/master/packages/platform-browser/animations/src/animation_renderer.ts#L154-L157
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Eugene
Как тут лайк поставить ?)
🌈🦄💖 — почти как лайк, только круче!)
источник

EK

Eugene Kalashnikov in Angular - русскоговорящее сообщество
@thekiba , спасибо за такие подробные разъяснения.
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
источник

E

Eugene in Angular - русскоговорящее сообщество
Вертихвост キバ
🌈🦄💖 — почти как лайк, только круче!)
за х1 месседж больше инфы вынес, чем за месяц чтива

Сэнкс!
источник

G

Galeups in Angular - русскоговорящее сообщество
Вот это вечер, спасибище парни 👍
источник
2019 December 20

AB

Alex Bu in Angular - русскоговорящее сообщество
Eugene
Как тут лайк поставить ?)
Лис вообще молодец) поставь ему лайки на гитхабе и в медиуме на статьях, по этой дороге ещё много интересного узнаешь)
источник

AK

Alex Komrakov in Angular - русскоговорящее сообщество
Ребят, небольшой вопрос, поднял пример ангуляра с использованием SSR из доки. База работает. Попробовал добавить в компонент Higcharts
import * as Highcharts from 'highcharts';
...
ngOnInit() {
   Highcharts.chart(this.element.nativeElement, {});
}
И в браузере все ок, а на сервере получаю
ERROR TypeError: Highcharts.chart is not a function
Подскажите куда копать, если кто то сталкивался с подобным

EDIT:
console.log(Higcharts) на сервере выдаёт
{ [Function] default: [Circular] }


настройки модулей во всех tsconfig-ax
    "module": "commonjs",
   "moduleResolution": "node"
источник

VB

Valentin Buryakov in Angular - русскоговорящее сообщество
Alex Komrakov
Ребят, небольшой вопрос, поднял пример ангуляра с использованием SSR из доки. База работает. Попробовал добавить в компонент Higcharts
import * as Highcharts from 'highcharts';
...
ngOnInit() {
   Highcharts.chart(this.element.nativeElement, {});
}
И в браузере все ок, а на сервере получаю
ERROR TypeError: Highcharts.chart is not a function
Подскажите куда копать, если кто то сталкивался с подобным

EDIT:
console.log(Higcharts) на сервере выдаёт
{ [Function] default: [Circular] }


настройки модулей во всех tsconfig-ax
    "module": "commonjs",
   "moduleResolution": "node"
Скорее всего Highcharts не поддерживает SSR, ведь на сервере нет никакого winndow, canvas и тд. Как вариант можно проверят isPlatformBrowser и только тогда вызывать Highcharts.chart(...)
источник

E

Eugene in Angular - русскоговорящее сообщество
Alex Bu
Лис вообще молодец) поставь ему лайки на гитхабе и в медиуме на статьях, по этой дороге ещё много интересного узнаешь)
Уже :D
источник

AK

Alex Komrakov in Angular - русскоговорящее сообщество
Valentin Buryakov
Скорее всего Highcharts не поддерживает SSR, ведь на сервере нет никакого winndow, canvas и тд. Как вариант можно проверят isPlatformBrowser и только тогда вызывать Highcharts.chart(...)
Да, я в целом не сомневаюсь что он не поддерживает, но ошибка еще до его вызова, а вот это смущает, проблема в импорте
источник

AK

Alex Komrakov in Angular - русскоговорящее сообщество
ладно, в принципе вопрос перестаёт быть критичным, потому что с другими либами вроде-бы проблем нет (проверил на moment). Но если кто-то знает в чем собственно дело, было бы интересно услышать
источник

VB

Valentin Buryakov in Angular - русскоговорящее сообщество
ну проблема в различии в es6 import и commonjs require. Если на сервере не вызывать его, то и не будет ошибки, что вы написали: ERROR TypeError: Highcharts.chart is not a function
Просто проверять isPlatformBrowser(this.platformID)
источник

ЕБ

Евгений Баранов in Angular - русскоговорящее сообщество
@thekiba не подскажешь по какой причине в тестах появляется An error was thrown in afterAll
источник

D

Dima in Angular - русскоговорящее сообщество
Думаю лучше не упоминать по среди ночи 👀
источник