Почему при вызове метода компонента из атрибутной директивы передается контекст директивы, а не компонента?

Как сделать так, чтобы контекст при вызове метода компонента в этом случае был контекстом компонента, а не директивы?

//<input [Name]="(setFirstname).bind(this)" type="text"> - I think that this decision is not well. I want see standart decision this problem.

import { Component, OnInit } from '@angular/core';
import { Directive, HostListener, Input, ElementRef } from '@angular/core';

@Component({
  selector: 'app-registry',
  templat: '<p>firstname</p><div class="wrapp-input"><input [Name]="setFirstname" type="text"></div>',
  styles: ''
})
export class RegistryComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

  public setFirstname(value: string) {
    console.log(this)
    //this context will be context of directive
  }
}

@Directive({
  selector: '[Name]'
})
export class NameDirective {

  constructor(private el: ElementRef) { }

  private value = ''

  @Input("Name")
  public accept(value: string){}

  private enter(value: string) {
    this.value = value
    this.accept(value)
  }

  @HostListener('keyup', ['$event']) public onKeyup(event: KeyboardEvent): void {
    //..It is hidden code. Check value for not accessfuly symbols.
    let value = this.el.nativeElement.value
    this.enter(value)
  }
}
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Так написать еще умудриться надо :)

Все правильно, вы в компонент передали просто функцию, которая записана в поле setFirstname. Функция не стрелочная, контекст не захватывает, использует тот, который ей передан. А делая this.accept вы и передаете ей this, т.е. инстанс NameDirective.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы