У меня есть приложение angular 8.
И я пытаюсь создать новый элемент с маршрутизацией. Ссылка для создания элемента - это дочерний маршрут. И я пытаюсь получить идентификатор предмета. Но каждый раз, когда идентификатор равен нулю.
У меня есть это как маршрутизация:
{
path: ':dossierId',
component: ViewComponent,
resolve: {
dossier: DossierResolver,
dossierItems: DossierItemsResolver
},
children: [
{
path: 'item/new/:dossierItemType',
component: ItemComponent,
resolve: {
dossier: DossierResolver,
dossierItems: DossierItemsResolver
}
},
]
},
, и это компонент:
export class ItemComponent implements OnInit {
itemTypes = DossierItemTypeDto;
formBuilder = new FormBuilder();
isNew = false;
editItemForm: FormGroup;
dossierItemId: string;
item: DossierItemDto;
dossierItems: DossierItemDto[];
dossier: DossierDto;
globalErrors: ValidationErrors;
constructor(private dossierService: DossierService, private route: ActivatedRoute, private router: Router,
private errorProcessor: ErrorProcessor) {
this.route.params.subscribe((params: Params) => {
this.dossier.id = params.id;
});
//this.dossier = this.route.snapshot.data.dossier;
this.dossierItemId = this.route.snapshot.params.dossierItemId;
this.isNew = this.dossierItemId === undefined;
this.dossierItems = this.route.snapshot.data.dossierItems;
if (this.isNew) {
this.item = {
title: '',
itemType: this.route.snapshot.params.dossierItemType,
date: moment().format('Y-MM-DD'),
createdAt: moment().format('Y-MM-DD'),
body: '' };
} else {
this.item = this.dossierItems.find(i => i.id === this.dossierItemId);
}
}
ngOnInit(): void {
this.editItemForm = this.formBuilder.group({
title: this.formBuilder.control(this.item.title, [Validators.required]),
itemType: this.formBuilder.control(this.item.itemType, [Validators.required]),
date: this.formBuilder.control(moment(this.item.date, 'Y-MM-DD'), [Validators.required]),
body: this.formBuilder.control(this.item.body, [Validators.required, Validators.maxLength(2097152)])
});
}
}
Но каждый раз, когда это:
this.dossier.id = params.id;
дает null
Так что я должен изменить по этому поводу?
Спасибо
, если я сделаю это:
this.route.firstChild.params.subscribe((params: Params) => {
this.dossier.id = params.id;
});
Я уже получаю сообщение об ошибке при загрузке компонента:
core.js:6406 ERROR TypeError: Cannot read property 'params' of null
at new ItemComponent (item.component.ts:36)
at NodeInjectorFactory.ItemComponent_Factory [as factory] (item.component.ts:140)
at getNodeInjectable (core.js:6176)
at instantiateAllDirectives (core.js:14734)
at createDirectivesInstances (core.js:14040)
at ɵɵelementStart (core.js:23537)
at Module.ɵɵelement (core.js:23597)
at ViewComponent_div_1_Template (view.component.html:8)
at executeTemplate (core.js:13997)
at renderView (core.js:13797)
, если я делаю это так:
{
path: ':dossierId',
component: ViewComponent,
resolve: {
dossier: DossierResolver,
dossierItems: DossierItemsResolver
}
},
{
path: ':dossierId/item/new/:dossierItemType',
component: ItemComponent,
resolve: {
dossier: DossierResolver,
dossierItems: DossierItemsResolver
}
},
Тогда это работает.
Но я не хочу этого, потому что я хочу загрузить новый элемент в том же виде, а не в отдельном представлении
Thank you I try that: core.js:6406 ERROR TypeError: Cannot set property 'id' of undefined
at SafeSubscriber._next (item.component.ts:37)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:183)
at SafeSubscriber.next (Subscriber.js:122)
at Subscriber._next (Subscriber.js:72)
at Subscriber.next (Subscriber.js:49)
at BehaviorSubject._subscribe (BehaviorSubject.js:14)
at BehaviorSubject._trySubscribe (Observable.js:42)
at BehaviorSubject._trySubscribe (Subject.js:81)
at BehaviorSubject.subscribe (Observable.js:28)
at new ItemComponent (item.component.ts:36)