Angular 参考错误:“__“装饰”没有定义;将输入传递给角度指令时

Angular 参考错误:“__“装饰”没有定义;将输入传递给角度指令时,angular,typescript,angular2-directives,Angular,Typescript,Angular2 Directives,我目前正试图将一个对象传递给下面的created指令,而element属性仍然未定义,即使别名与@input decorator匹配。onClick方法也被正确命中 import { Directive, Input, HostListener } from '@angular/core'; @Directive({ selector: '[nextFocus]' }) export class NextFocusDirective { @Input('ne

我目前正试图将一个对象传递给下面的created指令,而element属性仍然未定义,即使别名与@input decorator匹配。onClick方法也被正确命中

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

  @Directive({
      selector: '[nextFocus]' 
  })

  export class NextFocusDirective {
  @Input('nextFocus')
  element: any;

  @HostListener('click', ['$event'])
   public onClick($event: Event) {
      debugger;
      $($event.target).focus();
   }
 }
此处显示了在html中使用它的位置:

<button type="submit" class="btn btn-outline-success"
    ngbTooltip="Add"
    [nextFocus]="nextElement">
    <i class="mdi mdi-plus"></i>
</button>


我根据angular文档尝试了各种语法,但无法解决它。我缺少什么导致元素属性正确初始化?

我可以通过向输入属性添加setter来解决这个问题

private _element:any;

@Input('nextFocus')
set element(value: any) {
    this._element = value;
}

添加元素后,我可以成功地利用它。我认为这与导致初始问题的两个版本之间的ts生成有关。

您也可以在ngAfterContentInit生命周期方法中访问输入属性值:

  export class NextFocusDirective implements AfterContentInit {

      @Input('nextFocus')
      element: any;

      @HostListener('click', ['$event'])
      public onClick($event: Event) {
         debugger;
         $($event.target).focus();
      }

      ngAfterContentInit(): void {
          const val = this.element; 
          debugger; // val will contain input property value
      }

 }

您的@angular/*和typescript版本是什么?错误消息听起来可能需要更新。奇怪的是,我唯一错过的是构造函数,您是否尝试放置构造函数并重试?什么是“nextElement”?这是一个模板变量吗?为什么要使用jquery?@kalamarico我已经尝试添加了一个构造函数,但它并没有解决这个问题。我还尝试将element属性作为可注入的元素添加到构造函数中(无可否认,这只是一个天真的尝试),但没有任何帮助。我想这与我输入的设置方式有关试着删除函数性,设置最小版本,删除onclick,并将元素设置为不同类型的任何字符串,例如,我不知道,试着先做一个简单的指令也许你是对的,不喜欢它现在的样子