Как я могу привязать обратный вызов в директиве к компоненту хоста? - PullRequest
0 голосов
/ 26 апреля 2019

Как я могу привязать обратный вызов в директиве к компоненту хоста?

Я работаю с 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 и используется только для внутренней реализации.

существует ли какой-либо стандартный способ?

...