Size: a a a

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

2020 March 17

AE

Argument Exception in Angular - русскоговорящее сообщество
Dmitry Teplov
для этого нужно переписывать код, чтобы не подписываться внутри метода
это уже детали
источник

АГ

Александр Гурьев... in Angular - русскоговорящее сообщество
Александр Гурьев
Вопрос по Redux. Пример: Есть один компонент для списка Поставщиков и  списка  Клиентов (пробрасывается переменная в роуте в компонент которая определяет какая инфа поставляется в компонент).  Данные для компонента храню в  ngRX. Не могу понять как сделать универсальный State. Структура State как я понял фиксируется в initialState.  Как создавать новое свойство в State из переменной если появился новый тип данных(Поставщики, Клиенты и тд)?
Вопрос снят. Самое обидное что после того как сделал, нашел в комментариях разработчиков подсказку.
источник

DP

Den Politykin in Angular - русскоговорящее сообщество
Argument Exception
это уже детали
а можешь на простом примере описать как это должно выглядеть?
источник

MM

Max Minin in Angular - русскоговорящее сообщество
Здравствуйте, уважаемые коллеги!
Не думал, что это случится со мной, но я близок к крику о помощи.

Есть ангулар компонент, в темплейте input type=file, по событию (change) обрабатываем прикреплённый файл, с помощью FileReader считываем байты, которые ловим в reader.onload.

После получения данных в reader.onload нужно обновить внутренние переменные, влияющие на ngIf в темплейте. Но темплейт не обновляется ни в какую.

Выяснил, что дело в ngZone, FileReader не обёрнут в зону ангулара, из-за чего теряется контекст.

Пробую по-всякому, ничего не помогает. Если те же переменные в другом месте изменить, всё обновляется штатно.

Оборачиваю всю работы с FileReader в zone.runOutsideAngular, затем в onload делаю zone.run.

Делаю cdr.markForCheck и detectChanges.

Никак. Кто сталкивался с таким? Пожалуйста, помогите.
источник

MM

Max Minin in Angular - русскоговорящее сообщество
Буду рад любым советам, отвечу на вопросы.
источник

MM

Max Minin in Angular - русскоговорящее сообщество
При этом в том же месте, где идёт присваивание к переменным данные также выкидываются выше с помощью эмиттера. И там всё обновляется нормально! А в самом компоненте нет.
источник

MM

Max Minin in Angular - русскоговорящее сообщество
Бида :-(
источник

ED

Evgeny Dobriansky in Angular - русскоговорящее сообщество
Max Minin
Здравствуйте, уважаемые коллеги!
Не думал, что это случится со мной, но я близок к крику о помощи.

Есть ангулар компонент, в темплейте input type=file, по событию (change) обрабатываем прикреплённый файл, с помощью FileReader считываем байты, которые ловим в reader.onload.

После получения данных в reader.onload нужно обновить внутренние переменные, влияющие на ngIf в темплейте. Но темплейт не обновляется ни в какую.

Выяснил, что дело в ngZone, FileReader не обёрнут в зону ангулара, из-за чего теряется контекст.

Пробую по-всякому, ничего не помогает. Если те же переменные в другом месте изменить, всё обновляется штатно.

Оборачиваю всю работы с FileReader в zone.runOutsideAngular, затем в onload делаю zone.run.

Делаю cdr.markForCheck и detectChanges.

Никак. Кто сталкивался с таким? Пожалуйста, помогите.
делал точно так же, detect changes работал, код в студию
источник

MM

Max Minin in Angular - русскоговорящее сообщество
К сожалению не могу код показать.
источник

MM

Max Minin in Angular - русскоговорящее сообщество
Он во внутренней сети и головы долой за вынос.
источник

MM

Max Minin in Angular - русскоговорящее сообщество
Можешь объяснить, в какой момент нужно делать detectChanges? в onload после обновления переменных?
источник

KV

Karpov Vladimir in Angular - русскоговорящее сообщество
мб потому что вызов zone.run обернут в zone.runOutsideAngular ?
источник

MM

Max Minin in Angular - русскоговорящее сообщество
А так не должно быть?
источник

MM

Max Minin in Angular - русскоговорящее сообщество
смотрю пример тут

https://dzone.com/articles/understanding-ngzone

вроде обёрнуто
источник

SV

Sergey Vakhramov in Angular - русскоговорящее сообщество
А что значит запись в шаблоне типа [project]="[project$ | async]"?
Вместо {{ }} можно брать [] ?
источник

SV

Sergey Vakhramov in Angular - русскоговорящее сообщество
Что-то я не догнал или туплю)
источник

RK

Roman Kolesnikov in Angular - русскоговорящее сообщество
Sergey Vakhramov
А что значит запись в шаблоне типа [project]="[project$ | async]"?
Вместо {{ }} можно брать [] ?
project$ | async - является значением
А [project$ | async] - является значением в массиве
источник

SV

Sergey Vakhramov in Angular - русскоговорящее сообщество
Спасибо, тогда я правильно понял, просто подумал, может это какой-то способ по-иному значение передать
источник

AB

Andrew Baranow in Angular - русскоговорящее сообщество
Привет. Подскажите может сталкивались с буфером обмена.
Вопрос не по ангуряру чуть а по Javascript

Использую этот механизм

function copyTextToClipboard(str) {
           const el = document.createElement('textarea');
           el.value = str;                              
           el.setAttribute('readonly', '');
           el.style.position = 'absolute';
           el.style.left = '-9999px';                      
           document.body.appendChild(el);                  
           const selected =
               document.getSelection().rangeCount > 0        
                   ? document.getSelection().getRangeAt(0)    
                   : false;                                    
           el.select();                                    // Select the <textarea> content
           document.execCommand('copy');                   // Copy - only works as a result of a user action (e.g. click events)
           document.body.removeChild(el);                  // Remove the <textarea> element
           if (selected) {                                 // If a selection existed before copying
               document.getSelection().removeAllRanges();    // Unselect everything on the HTML document
               document.getSelection().addRange(selected);   // Restore the original selection
           }
       };
Может есть лучшее решение ?

Вызываю функцию в сочетании с сервисом TurndownService
var turndownService = new TurndownService({
               emDelimiter: '__',
           });
           var markdown = turndownService.turndown($(item).html());

           copyTextToClipboard(markdown);
источник

VM

Vasiliy Makaganchuk in Angular - русскоговорящее сообщество
Andrew Baranow
Привет. Подскажите может сталкивались с буфером обмена.
Вопрос не по ангуряру чуть а по Javascript

Использую этот механизм

function copyTextToClipboard(str) {
           const el = document.createElement('textarea');
           el.value = str;                              
           el.setAttribute('readonly', '');
           el.style.position = 'absolute';
           el.style.left = '-9999px';                      
           document.body.appendChild(el);                  
           const selected =
               document.getSelection().rangeCount > 0        
                   ? document.getSelection().getRangeAt(0)    
                   : false;                                    
           el.select();                                    // Select the <textarea> content
           document.execCommand('copy');                   // Copy - only works as a result of a user action (e.g. click events)
           document.body.removeChild(el);                  // Remove the <textarea> element
           if (selected) {                                 // If a selection existed before copying
               document.getSelection().removeAllRanges();    // Unselect everything on the HTML document
               document.getSelection().addRange(selected);   // Restore the original selection
           }
       };
Может есть лучшее решение ?

Вызываю функцию в сочетании с сервисом TurndownService
var turndownService = new TurndownService({
               emDelimiter: '__',
           });
           var markdown = turndownService.turndown($(item).html());

           copyTextToClipboard(markdown);
источник