#angular #typescript
#angular #машинописный текст
Вопрос:
Мне нужно изменить заголовок titleItemPanel
представления ItemsPanelComponent
в зависимости от того, какое действие применяется editItem()
в ItemsPageComponent
. Но у меня есть вложенный компонент: ItemsPageComponent
-> ItemsMapComponent
-> ItemsPanelComponent
. Событие getItemPanelTitle
генерируется дочерним элементом ( ItemsPanelComponent
), и это событие должно быть принято прародителем ( ItemsPageComponent
). Это событие должно быть передано родительскому ( ItemsMapComponent
) и должно передать его прародителю ( ItemsPageComponent
).
ItemsPageComponent
:
export class ItemsPageComponent {
@Output() isTitleCreateItem = new EventEmitter<boolean>();
editItem(itemId: string, event) {
...
this.isTitleCreateItem = !this.isTitleCreateItem;
}
<button md-icon-button
(click)="editItem(item.id, $event)">
<md-icon>mode_edit</md-icon>
</button>
ItemsPanelComponent
:
export class ItemsPanelComponent {
public titleItemPanel: string;
...
getItemPanelTitle(event: boolean) {
this.titleItemPanel = event ? 'Create' : 'Edit';
}
}
<h4 (isTitleCreateItem)="getItemPanelTitle($event)" class="panel__title">
{{titleItemPanel}}
</h4>
Комментарии:
1. Используйте
@Input()
на своемItemsPanelComponent
и передавайтеisCreateItem
значение2. различные способы взаимодействия компонентов относятся angular.io/guide/component-interaction
3. @penleychan, @Input() isCreateItem: логическое значение; — это попытка? Я получаю сообщение об ошибке Выражение изменилось после того, как оно было проверено. Предыдущее значение: ‘true’. Текущее значение: ‘false’.
Ответ №1:
Если вы хотите изменить «заголовок» документа в навигаторе, используйте Title
public constructor(private titleService: Title ) { }
public setTitle( newTitle: string) {
this.titleService.setTitle( newTitle );
}
Ответ №2:
Попробуйте это:
ItemsPanelComponent:
export class ItemsPanelComponent {
this.title;
get itemsPanelTitle() {
this.title= this.isCreateItem ? 'Create' : 'Edit';
}
}
<h4 class="panel__title">{{title}}</h4>
У меня это работает.