У меня есть logi c, где компонент может изменять элементы меню навигации макета.
У меня есть компонент для макета по умолчанию:
export class DefaultLayoutComponent {
public sidebarMinimized = false;
public navItems = navItems; //default values imported from _nav.ts
constructor(private cdRef: ChangeDetectorRef) {
}
headerText: string = "Default Text";
headerVisible: boolean = true;
public setHeaderVisible(visible: boolean): void {
this.headerVisible = visible;
}
public setHeaderText(text: string): void {
this.headerText = text;
}
public setNavItems(key: string): void {
if (key == 'SPACE') {
this.navItems = spaceDetailsNavItems;
}
}
public setNavItemUrlArgs(itemKey: string, paramKey: string, paramValue: string): void {
const _navItems = <ICustomNavData[]>this.navItems;
const menuItem = _navItems.find(r => r.key == itemKey);
if (menuItem) {
var url = menuItem.url.toString();
url = url.replace(paramKey, paramValue);
menuItem.url = url;
}
}
ngAfterViewChecked() {
this.cdRef.detectChanges();
}
}
setNavItems
переключает текущий пункты меню, в данном случае для другого массива элементов, также импортированные из _nav.ts
.
Вот компонент, пытающийся изменить пункты меню. Я вставляю DefaultLayoutComponent
в него.
export class SpaceDetailsComponent implements OnInit {
/** space-details ctor */
constructor(private route: ActivatedRoute,
private spaceService: SpaceService,
private defaultLayout: DefaultLayoutComponent) {
}
ngOnInit(): void {
this.defaultLayout.setNavItems('SPACE'); //fails here....
this.defaultLayout.setHeaderText('Details');
}
}
Выше работает, я получаю пункты меню для изменения, но я также получаю следующую ошибку:
ERROR TypeError: Невозможно прочитать свойство 'length' с неопределенным значением в createUrlTree (router. js: 1902) в Router.pu sh .. / node_modules/@angular/router/fesm5/router.js.Router.createUrlTree (router. js: 4220) в AppSidebarNavLinkComponent.pu sh .. / node_modules/@coreui/angular/fesm5/coreui-angular.js.AppSidebarNavLinkComponent.ngOnInit (coreui- angular. js: 1317 . js: 31810) в Object.eval [как updateDirectives] (AppSidebarNavItemsComponent. html: 33) в Object.debugUpdateDirectives [as updateDirectives] (core. js: 31802)
Это кажется, больше ошибки с шаблоном (CoreUI), чем Angular хотя.