Изменение URL-адреса пункта меню приводит к ошибке - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть 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 хотя.

...