У меня есть директива, которая добавляет значок к любому элементу, к которому он добавляется. Когда этот значок щелкнут, мне нужно вызвать функцию в любом компоненте, содержащем директиву. Эта функция использует router.navigate
для перехода от именованного выхода к новому компоненту. Все работает, за исключением того, что после того, как я щелкнул значок, новое содержимое именованного выхода маршрутизатора не отображается, пока я не двигаю мышью.
Вот соответствующие части директивы:
@Directive({
selector: '[editable]',
})
...
@Output() doEdit = new EventEmitter<string>();
...
private emitEditMessage(){
console.log("emitting"); <-----just so I can see that the function is called
this.doEdit.emit(this.targetField);
}
Вот где я использую директиву в шаблоне:
<span editable (doEdit)="editField($event)">
{{CurrentPersonInfo}}
</span>
Вот функция из моего родительского компонента, которая вызывается при срабатывании директивы:
public editField(fldName :string){
console.log("before nav");
this.router.navigate([{ outlets: { 'task-pane': 'edit' } }]);
console.log("after nav");
}
Когда я запускаю и нажимаю на значок, показанный директивой, я вижу в консоли ожидаемые сообщения: «испущено», «до навигации», «после навигации». Но вторичный маршрут («имя: панель задач») не обновляется с новым содержимым, пока я не передвину мышь.
Обновление. Только что заметил: если содержимое панели задач представляет собой просто жестко закодированную строку, то оно отображается сразу. Однако если я добавлю интерполированную привязку к свойству компонента панели задач (например, {{Title}} ), то любой жестко закодированный текст перед привязкой отображается немедленно. Связанный текст и любой жестко закодированный текст после него не отображаются до тех пор, пока я не передвину мышь.
Вот компонент панели:
@Component({
...
})
export class PersonEditPanelComponent extends BasePanel{
constructor(){
super();
console.log("panel ctor");
}
public Title: string = "Edit Person"
}
Вот HTML-шаблон панели:
This shows immediately.
{{Title}}
This and the "Title" won't show until I move the mouse after clicking the icon
Наконец, если я помещу ссылку на свой родительский компонент, который просто напрямую вызывает свою функцию editField
(та же самая, которая вызывается при испускании директивы), тогда все работает — весь текст (жестко закодированный и связанный) отображается немедленно.
Итак, мои вопросы: есть ли что-то неотъемлемое в маршрутизации, вызывающее эту задержку для разрешения привязок? Есть идеи, как это исправить?
Спасибо!