Size: a a a

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

2020 March 16

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
Светлана
если компонент много раз повторяется на странице и подписывается на params - норм или не норм? или лучше в родительском один раз подписаться и передавать?
Подход контейнерных компонентов
источник

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
Pasha
Всем привет ) Спасибо заранее за ответ,как лучше дизейблить поля на форме при ее ините в зависимосте от статуса,просто через свич кейс или есть более изящный подход?
Ты про ngSwith, который в template?
источник

P

Pasha in Angular - русскоговорящее сообщество
Artak Ayvazyan
Ты про ngSwith, который в template?
Нет,про обычный в js,мне нужно блокировать поля в зависимости от ответа сервера ,полей много ,и я думаю как красивее это решить ,что бы не городить полотна с именами полей)
источник

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
Pasha
Нет,про обычный в js,мне нужно блокировать поля в зависимости от ответа сервера ,полей много ,и я думаю как красивее это решить ,что бы не городить полотна с именами полей)
Создай form group и через patchState проверяй disabled параметр
источник

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
Да и без patchState сразу при создании обьекта проверяй
источник

P

Pasha in Angular - русскоговорящее сообщество
Artak Ayvazyan
Создай form group и через patchState проверяй disabled параметр
А что ты подразумеваешь под "при создании обьекта проверяй" ? Типа сразу передавать в конфиг form group какие блочить?
источник

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
Да
источник

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
источник

AA

Artak Ayvazyan in Angular - русскоговорящее сообщество
disabled через проверку делай
источник

P

Pasha in Angular - русскоговорящее сообщество
@spowka Я понял,cпасибо
источник

IF

Igor Filippov in Angular - русскоговорящее сообщество
ееее
источник

АЧ

Артур Чернуха... in Angular - русскоговорящее сообщество
Привет. Накиньте, пожалуйста, идейки, как можно уменьшить дублирование кода.
Идея такая, что я в конструкторе компонента должен выполнять некую логику и при этом использую два инжекта, типо:
  constructor(
   private localeService: BsLocaleService,
   @Inject(PLATFORM_ID) private platformId: {},
 ) {
if (isPlatformBrowser(platformId)) {
this.localeService.use('en');
}
}


Мне этот код нужно прописать где-то в 5 (может и больше) компонентах. Многова-то копирования получается. Какие идеи есть ? Думал в сторону Декораторов, но не уверен можно ли/правильно ли будет инжектить platformId & BsLocaleService там ?
источник

Вキ

Вертихвост キバ 🏡🦊... in Angular - русскоговорящее сообщество
Артур Чернуха
Привет. Накиньте, пожалуйста, идейки, как можно уменьшить дублирование кода.
Идея такая, что я в конструкторе компонента должен выполнять некую логику и при этом использую два инжекта, типо:
  constructor(
   private localeService: BsLocaleService,
   @Inject(PLATFORM_ID) private platformId: {},
 ) {
if (isPlatformBrowser(platformId)) {
this.localeService.use('en');
}
}


Мне этот код нужно прописать где-то в 5 (может и больше) компонентах. Многова-то копирования получается. Какие идеи есть ? Думал в сторону Декораторов, но не уверен можно ли/правильно ли будет инжектить platformId & BsLocaleService там ?
Как вам такой вариант? Отдать установку локали в localeService (или любой другой), чтобы он сам этим занимался
источник

АЧ

Артур Чернуха... in Angular - русскоговорящее сообщество
Вертихвост キバ 🏡🦊
Как вам такой вариант? Отдать установку локали в localeService (или любой другой), чтобы он сам этим занимался
В данном случае это сервис библиотеки. Вы предлагаете создать собственный, который будет выполнять вышеупомянутую логику, скажем в init() методе ?
источник

Вキ

Вертихвост キバ 🏡🦊... in Angular - русскоговорящее сообщество
Артур Чернуха
В данном случае это сервис библиотеки. Вы предлагаете создать собственный, который будет выполнять вышеупомянутую логику, скажем в init() методе ?
Речь даже не про init метод, а чтобы это делалось само внутри, например в constructor сервиса.

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

class MyBsLocaleService extends BsLocaleService {
 constructor(
   private localeService: BsLocaleService,
   @Inject(PLATFORM_ID) private platformId: {},
 ) {
   super();
   if (isPlatformBrowser(platformId)) {
     this.localeService.use('en');
   }
 }
}


а дальше просто подменить сервисы через providers в модуле, где подключаете сервис с локалью
источник

Вキ

Вертихвост キバ 🏡🦊... in Angular - русскоговорящее сообщество
Так же, если у BsLocaleService есть базовый абстрактный класс, то можно наследовать его и реализовать все его методы в своем классе, так будет правильнее
источник

АЧ

Артур Чернуха... in Angular - русскоговорящее сообщество
Вертихвост キバ 🏡🦊
Речь даже не про init метод, а чтобы это делалось само внутри, например в constructor сервиса.

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

class MyBsLocaleService extends BsLocaleService {
 constructor(
   private localeService: BsLocaleService,
   @Inject(PLATFORM_ID) private platformId: {},
 ) {
   super();
   if (isPlatformBrowser(platformId)) {
     this.localeService.use('en');
   }
 }
}


а дальше просто подменить сервисы через providers в модуле, где подключаете сервис с локалью
Всё выглядит очень логично и красиво, но вот не до конца представляю эту часть:
а дальше просто подменить сервисы через providers в модуле, где подключаете сервис с локалью


У меня есть:
@NgModule({
 imports: [
   BsDatepickerModule.forRoot(),
...

но мне нужно в том модуле, в котором это прописано сделать нечто подобное ?:
providers: [
 { provide: BsLocaleService, useClass: MyBsLocaleService },
]

(Возможно не useClass, не изучал этот вопрос ещё, но больше говорю за идею)
источник

Вキ

Вертихвост キバ 🏡🦊... in Angular - русскоговорящее сообщество
Артур Чернуха
Всё выглядит очень логично и красиво, но вот не до конца представляю эту часть:
а дальше просто подменить сервисы через providers в модуле, где подключаете сервис с локалью


У меня есть:
@NgModule({
 imports: [
   BsDatepickerModule.forRoot(),
...

но мне нужно в том модуле, в котором это прописано сделать нечто подобное ?:
providers: [
 { provide: BsLocaleService, useClass: MyBsLocaleService },
]

(Возможно не useClass, не изучал этот вопрос ещё, но больше говорю за идею)
Что-то типа того, но BsLocaleService я бы вынес в отдельный provider под отдельным токеном, и использовал бы его как useExisting в новом provider
источник

АЧ

Артур Чернуха... in Angular - русскоговорящее сообщество
Вертихвост キバ 🏡🦊
Что-то типа того, но BsLocaleService я бы вынес в отдельный provider под отдельным токеном, и использовал бы его как useExisting в новом provider
А вот тут, к сожалению, я Вас вообще не понял =( Можете показать минимальный пример ? И самое главное, почему именно такое решение ?
источник

Вキ

Вертихвост キバ 🏡🦊... in Angular - русскоговорящее сообщество
Артур Чернуха
А вот тут, к сожалению, я Вас вообще не понял =( Можете показать минимальный пример ? И самое главное, почему именно такое решение ?
Если только немного позже, сейчас не за ноутом)
источник