Как я могу привязать обратный вызов в директиве к компоненту хоста?
Я работаю с AngularFireAuth
Я создал директиву атрибута, которая будет прикреплена к любому элементу и получит входные данные в качестве функции обратного вызова.при нажатии он проверит, есть ли зарегистрированный пользователь, и только если он есть, вызовите функцию обратного вызова с аргументом currentUser
из AngularFireAuth
, если не зарегистрированный пользователь, откройте диалоговое окно входа.
import { Directive, Input, HostListener, ViewContainerRef } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import { DialogService } from '../services/dialog.service';
@Directive({
selector: '[_persistance]'
})
export class PersistanceDirective {
@Input('_persistance') callback: Function;
constructor(
private fireAuth: AngularFireAuth,
private dialog: DialogService,
private viewRef: ViewContainerRef
) {}
@HostListener('click')onClick(){
const currentUser = this.fireAuth.auth.currentUser
if(currentUser){
const hostComponent = this.viewRef['_view'].component
this.callback.call(hostComponent,currentUser)
}else{
this.dialog.openSignIn()
}
}
}
Итак, я хочу связать обратный вызов в директиве, а не в шаблоне, как
<button [_persistance]="someCallback.bind(this)"></button>
Я пытался получить доступ к компоненту хоста как viewRef['_view'].component
, и он работает.но есть мнение, что это не лучшая практика, поскольку _view
является частным получателем viewRef
и используется только для внутренней реализации.
существует ли какой-либо стандартный способ?