2016-09-06 3 views
4

Я использую p-panelmenu из превосходной библиотеки Prime-ng.PrimeNG MenuCallback

<p-panelMenu [model]="items" (click)="onClicked(event)"></p-panelMenu> 

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

Как получить выбранный элемент? Я отмечаю, что есть вызов команды «command» в классе menuItem; но кажется сумасшедшим, чтобы определить обратный вызов для каждого пункта меню. Вместо одного обратного вызова, который получает выбранный пункт меню. Что мне здесь не хватает?

ответ

2

Я должен был написать рекурсивную функцию для цикла через меню-пункты и подпункты и назначить команду обратного вызов для каждого из них:

export class TreeViewComponent implements OnInit { 
    @Output() onSelectedChanged: EventEmitter<MenuItem> = new EventEmitter<MenuItem>(); 

    items : any[] = []; 

    constructor (private contentService: ContentService) { 
    } 

    ngOnInit() { 
     this.getFolders(); 
    } 

    getFolders() { 
    this.contentService.getFolders().subscribe(this.setItems); 
    } 

    setItems = (x: any) => { 
     this.assignCallback(x); 
     this.items = x.items; 
    } 

    assignCallback(item:MenuItem){ 
    if(item.items != null && item.items.length > 0) { 
     item.items.forEach(x => this.assignCallback(x)) 
    } 
    item.command = this.commandCallback; 
    } 

    commandCallback(ev){ 
    console.log(ev.item); 
    } 
} 

Я оставлю этот вопрос открытым; должен быть лучший способ?

0

https://www.primefaces.org/primeng/#/menumodel

Вы можете прочитать документацию по типу MenuItem для большинства компонентов меню PrimeNG в. Внутри списка опций, которые могут иметь элементы, есть опция «command», которая выполняет обратный вызов.

Смежные вопросы