Size: a a a

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

2020 April 23

EI

Edem Injection in Angular - русскоговорящее сообщество
!!!вопрос насколько новичку во фронтенде актуально/нужно учить ангулар?
источник

EI

Edem Injection in Angular - русскоговорящее сообщество
товарищ начал учиться, и вот интересно, стоил ли ему учить ангулар, или сразу идти на более современное что-то?
источник

YS

Yuri Stepanov in Angular - русскоговорящее сообщество
современное что?) если совсем новичок, то можно Vue попробовать
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Ребята, пытаюсь запустить jest, протестить компонент в ангуляре. Выдает следующую ошибку:


Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.
   src/app/services/global/global.service.ts:115:9 - error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'typeof moment' has no compatible call signatures.

При этом в файл tsconfig.json добавил

"allowSyntheticDefaultImports": true,
   "esModuleInterop": true

Смотрел на гитхабе данную проблему.... Писали о таком решении....
In my opinion the correct solution is to change import * as moment from "moment" to import moment from "moment".

Возиожен ли другой вариант, чтобы не изменять импорты? поскольку их в проекте очень много
источник

Д

Дмитрий in Angular - русскоговорящее сообщество
Oleksandr Nikolskyi
Ребята, пытаюсь запустить jest, протестить компонент в ангуляре. Выдает следующую ошибку:


Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.
   src/app/services/global/global.service.ts:115:9 - error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'typeof moment' has no compatible call signatures.

При этом в файл tsconfig.json добавил

"allowSyntheticDefaultImports": true,
   "esModuleInterop": true

Смотрел на гитхабе данную проблему.... Писали о таком решении....
In my opinion the correct solution is to change import * as moment from "moment" to import moment from "moment".

Возиожен ли другой вариант, чтобы не изменять импорты? поскольку их в проекте очень много
у тебя в конфиге jest скорее всего другой tsconfig указан. была такая же проблема. решилась тем что в tsconfig.spec.json указал esModuleInterop false
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Дмитрий
у тебя в конфиге jest скорее всего другой tsconfig указан. была такая же проблема. решилась тем что в tsconfig.spec.json указал esModuleInterop false
Поменял на false и помогло!) Спасибо огромное!
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Ребята, не могу понять в чем проблема....пытаюсь протестить компонент с помощью jest....
Выдаёт ошибку:

expect(received).toBeTruthy()
   Received: undefined

Сам код:
Импортировал все модули и т.д.

describe('UsersComponent', () => {
 let fixture: ComponentFixture<UsersComponent>;
 let component: UsersComponent;

 beforeEach(async(() => {
   TestBed.configureTestingModule({
     declarations: [UsersComponent],
     imports: [
       .....
     ],
   }).compileComponents();

   fixture = TestBed.createComponent(UsersComponent);
   component = fixture.debugElement.componentInstance;
   fixture.detectChanges();
 }));

 it('should create UsersComponent', async(() => {
   expect(component).toBeTruthy();
 }));
});

Возможно ли такое, что в конфигах jest проблема ? Просто, когда файл спеки пустой, то проходит success
источник

A

Alexandr in Angular - русскоговорящее сообщество
Всем привет. Максимально абстрактный вопрос, но может получится с вашей помощью найти ответ.

У меня есть два компонента.
(ссылка под номером 1, активный) details и
(ссылка по номером 2) preview.

По нажатию на кнопку ниже происходит смена состояния и выполняется метод:

redirect() {
 if (..условие выполняется) {
   this.router.navigate(['tax-deduction', 'preview'], {
     relativeTo: this.route.parent, queryParamsHandling: 'preserve'
   });
 }
}

Так вот если обновить страницу и нажать кнопку смены состояния, редирект на компонент 2 происходит, но если перейти сначала на компонент 2 и вернуться, нажать кнопку смены состояния, то после смены он остаётся на 1-м компоненте не показывая никаких ошибок, ничего, как будто игнорируя router.navigate

может было у кого нибудь на опыте нечто подобное.
источник

IL

Igor Lezhnev in Angular - русскоговорящее сообщество
Alexandr
Всем привет. Максимально абстрактный вопрос, но может получится с вашей помощью найти ответ.

У меня есть два компонента.
(ссылка под номером 1, активный) details и
(ссылка по номером 2) preview.

По нажатию на кнопку ниже происходит смена состояния и выполняется метод:

redirect() {
 if (..условие выполняется) {
   this.router.navigate(['tax-deduction', 'preview'], {
     relativeTo: this.route.parent, queryParamsHandling: 'preserve'
   });
 }
}

Так вот если обновить страницу и нажать кнопку смены состояния, редирект на компонент 2 происходит, но если перейти сначала на компонент 2 и вернуться, нажать кнопку смены состояния, то после смены он остаётся на 1-м компоненте не показывая никаких ошибок, ничего, как будто игнорируя router.navigate

может было у кого нибудь на опыте нечто подобное.
а где прописано обращение к this.redirect()?
источник

A

Alexandr in Angular - русскоговорящее сообщество
Igor Lezhnev
а где прописано обращение к this.redirect()?
в методе, которые вызывается по смене состояния , выглядит так, если это о чём то скажет

onStateChanged() {
 this.loadFullWorkflow();
 this.componentRef && (this.componentRef.workflow = this.workflow);
 this.redirect();
 this.componentRef.ngOnInit();
}
источник

IL

Igor Lezhnev in Angular - русскоговорящее сообщество
Alexandr
в методе, которые вызывается по смене состояния , выглядит так, если это о чём то скажет

onStateChanged() {
 this.loadFullWorkflow();
 this.componentRef && (this.componentRef.workflow = this.workflow);
 this.redirect();
 this.componentRef.ngOnInit();
}
в любом случае - Обновить страницу - кто то должен дергнуть данный метод.
Возможны варианты 1) constructor 2) Angular lifecycle 3) какой нить APP_INITIALIZER ну можно еще чем то...
источник

IL

Igor Lezhnev in Angular - русскоговорящее сообщество
но думаю если вы поставите к примеру console.log внутрь redirect вы не увидете вызова
источник

A

Alexandr in Angular - русскоговорящее сообщество
Igor Lezhnev
но думаю если вы поставите к примеру console.log внутрь redirect вы не увидете вызова
он есть (
и условие проходит.
проверял консолями

router.navigate как будто игнорируется, то есть если поставить какой-нибудь рандомный несуществующий путь, то редирект на него не произойдёт.
источник

A

Alexandr in Angular - русскоговорящее сообщество
мб есть способ как дебажить роутер и отследить что происходит внутри него
источник

IL

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

IL

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

A

Alexandr in Angular - русскоговорящее сообщество
Igor Lezhnev
Enabletracing в true
о, спасибо, посмотрю.
благодарю
источник

IL

Igor Lezhnev in Angular - русскоговорящее сообщество
RouterModule.forRoot( routes, { enableTracing: true } )
источник

IL

Igor Lezhnev in Angular - русскоговорящее сообщество
Ну или просто в конструкторе можно подписаться на изменения если это полотнище не хочется видеть... Это this.router.events.subscribe
источник

D

Dmitry in Angular - русскоговорящее сообщество
Привет! Как можно передать данные из родительского компонента в дочерний, если данные достаются из стора при инициации? Если во время инициализации родительского компонента передавать, то данные еще не готовы. Спасибо!
источник