Size: a a a

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

2020 May 14

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Kenya-West ✔
Всем привет!

Есть компонент app-file-upload, я ему подаю входные данные так:
<app-file-upload [inputs]="{
               placeholders: {
                   label: 'Документ',
                   description: 'Опись документа'
               }, restrictions: {
                   size: 3,
                   extensions: {
                       fileExtensions: ['jpeg', 'jpg', 'png', 'gif'],
                       httpTypes: ['image/jpeg', 'image/x-png', 'image/png', 'image/gif']
                   }
               }
           }"></app-file-upload>


При загрузке веб-приложения ругается: TypeError: Cannot read property 'restriction' of undefined. Это как? Крышу сносит
а что внутри компонента?
источник

AK

Alexander Kolomiytse... in Angular - русскоговорящее сообщество
Anton Volkov
Привет!

Можете подсказать, в чем проблема может быть?

Делаю компонент, в котором в заголовке сайта поочередно печатаются и стираются слова

Все норм при обычной serve сборке, но как только собираю для прода и ssr — 
ng build —prod — ничего не работает — сайт открывается пустым, а на этапе сборки нет ошибок

Понял, что проблема в рекурсивном вызове функции, которая перезапускает отрисовку слова, но не очень понимаю, в чем именно проблема и как ее решить

Ниже скрины с кодом компонента
Если этот же код запускается и для серверного рендеринга, то лучше его для SSR отключить, так как рекурсивные таймауты и интервалы не дают завершить SSR все таски и понять когда заканчивать рендеринг. Отключить можно например с помощью проверки на существование объекта window
источник

E

Eugene in Angular - русскоговорящее сообщество
обе не особо читабельны
источник

VS

Vova Soltys in Angular - русскоговорящее сообщество
Eugene
обе не особо читабельны
Что заменить?
источник

K✔

Kenya-West ✔ in Angular - русскоговорящее сообщество
Oleg Safonov
а что внутри компонента?
Например, вот:

<input class="file-drop-area__file-input" [ngClass]="state.files.length === 0 ? 'file-drop-area__file-input--full-height' : 'file-drop-area__file-input--half-height'" type="file" [accept]="inputs.restrictions.extensions.fileExtensions.join(', ')" multiple>
   <p>Максимальный размер файла: {{(inputs.restrictions.size / 1024 / 1024).toPrecision(1)}} МБ</p>
   <p>Типы файлов: {{inputs.restrictions.extensions.fileExtensions.join(", ")}}</p>


Неужто в этом проблема?

Так рантайм ангуляра ругается на родительский компонент ведь...
источник

E

Eugene in Angular - русскоговорящее сообщество
Vova Soltys
Что заменить?
страшную строку с кучей чейнов разнести построчно, чтобы было легче читать
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Kenya-West ✔
Например, вот:

<input class="file-drop-area__file-input" [ngClass]="state.files.length === 0 ? 'file-drop-area__file-input--full-height' : 'file-drop-area__file-input--half-height'" type="file" [accept]="inputs.restrictions.extensions.fileExtensions.join(', ')" multiple>
   <p>Максимальный размер файла: {{(inputs.restrictions.size / 1024 / 1024).toPrecision(1)}} МБ</p>
   <p>Типы файлов: {{inputs.restrictions.extensions.fileExtensions.join(", ")}}</p>


Неужто в этом проблема?

Так рантайм ангуляра ругается на родительский компонент ведь...
может в component.js он ругается?

```
При загрузке веб-приложения ругается: TypeError: Cannot read property 'restriction' of undefined
```

Это в консоли или где?
источник

MK

Manar Kurmanov in Angular - русскоговорящее сообщество
Kenya-West ✔
Например, вот:

<input class="file-drop-area__file-input" [ngClass]="state.files.length === 0 ? 'file-drop-area__file-input--full-height' : 'file-drop-area__file-input--half-height'" type="file" [accept]="inputs.restrictions.extensions.fileExtensions.join(', ')" multiple>
   <p>Максимальный размер файла: {{(inputs.restrictions.size / 1024 / 1024).toPrecision(1)}} МБ</p>
   <p>Типы файлов: {{inputs.restrictions.extensions.fileExtensions.join(", ")}}</p>


Неужто в этом проблема?

Так рантайм ангуляра ругается на родительский компонент ведь...
inputs может быть undefined. *ngIf должен решить проблему
источник

K✔

Kenya-West ✔ in Angular - русскоговорящее сообщество
Oleg Safonov
может в component.js он ругается?

```
При загрузке веб-приложения ругается: TypeError: Cannot read property 'restriction' of undefined
```

Это в консоли или где?
В консоли, ага. Ругается на родительский компонент, в котором app-file-upload лежит
источник

K✔

Kenya-West ✔ in Angular - русскоговорящее сообщество
Manar Kurmanov
inputs может быть undefined. *ngIf должен решить проблему
Ща поправим всё, что внутри...
источник

VS

Vova Soltys in Angular - русскоговорящее сообщество
Eugene
страшную строку с кучей чейнов разнести построчно, чтобы было легче читать
ok
источник

Vi ٩(̾●̮̮̃̾•̃̾)۶... in Angular - русскоговорящее сообщество
всем привет! У меня есть форма, есть онсабмит, первый раз нажимаю сабмит все ок. Дальше идут такие чудеса. Есть идеи почему это случаеться?
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Vi ٩(̾●̮̮̃̾•̃̾)۶
всем привет! У меня есть форма, есть онсабмит, первый раз нажимаю сабмит все ок. Дальше идут такие чудеса. Есть идеи почему это случаеться?
покажите в коде что
источник

Vi ٩(̾●̮̮̃̾•̃̾)۶... in Angular - русскоговорящее сообщество
вот форма
источник

Vi ٩(̾●̮̮̃̾•̃̾)۶... in Angular - русскоговорящее сообщество
источник

AV

Anton Volkov in Angular - русскоговорящее сообщество
Alexander Kolomiytsev
Если этот же код запускается и для серверного рендеринга, то лучше его для SSR отключить, так как рекурсивные таймауты и интервалы не дают завершить SSR все таски и понять когда заканчивать рендеринг. Отключить можно например с помощью проверки на существование объекта window
Не уверен, что понял

То есть у меня проект использует SSR — и необходимо добавить этот компонент

Что может быть правильным решением, чтобы и то и то осталось?

Может переписать этот компонент, только не очень понимаю как
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
а компонент?
источник

Vi ٩(̾●̮̮̃̾•̃̾)۶... in Angular - русскоговорящее сообщество
сабмит вот, но туда даже не заходит
источник

K✔

Kenya-West ✔ in Angular - русскоговорящее сообщество
Manar Kurmanov
inputs может быть undefined. *ngIf должен решить проблему
Заменил inputs на inputs?

<input class="file-drop-area__file-input" [ngClass]="state.files.length === 0 ? 'file-drop-area__file-input--full-height' : 'file-drop-area__file-input--half-height'" type="file" [accept]="inputs?.restrictions.extensions.fileExtensions.join(', ')" multiple>
   <p>Максимальный размер файла: {{(inputs?.restrictions.size / 1024 / 1024).toPrecision(1)}} МБ</p>
   <p>Типы файлов: {{inputs?.restrictions.extensions.fileExtensions.join(", ")}}</p>


Всё равно та же ошибка со ссылкой на родительский (!) компонент. Почему на него? Angular Ivy 9.1
источник

AK

Alexander Kolomiytse... in Angular - русскоговорящее сообщество
Anton Volkov
Не уверен, что понял

То есть у меня проект использует SSR — и необходимо добавить этот компонент

Что может быть правильным решением, чтобы и то и то осталось?

Может переписать этот компонент, только не очень понимаю как
Надо просто разделять что формируется на стороне сервера и на стороне клиента. Вначале сервер формирует html, потом он его отдает на клиент, который запускает js, убирает все что сделал сервер и формирует уже свой html. На сервере вам такой функционал ни к чему, а на клиенте у вас будет работать если вы добавите вначале выход из этой структуры с проверкой например такой if (typeof window === 'undefined') { return; }
источник