在Angular2中设置自定义属性指令

问题描述 投票:1回答:2

我试图将一个服装属性指令设置为输入,但我找不到这样做的方法。

我的指示如下

@Directive({
    selector: '[disable-paste]'
})
export class DisablePaste {
    constructor(private _elementRef:ElementRef) {
        this._elementRef.nativeElement.onpaste = (e:any) => {
            e.preventDefault();
        }
    }
}

如果我只是将指令放在输入中,它就可以工作。但是,当我试图“有条件地”使用它时,却没有。我尝试了所有这些:

<input [disable-paste]="doNotAllowPaste" ... />
<input disable-paste="doNotAllowPaste" ... />
<input [attr.disable-paste]="doNotAllowPaste" ... />
angular
2个回答
3
投票

我认为只要输入属性值发生变化,您就需要一个输入属性来有条件地执行逻辑:

@Directive({
  selector: '[disable-paste]'
})
export class DisablePaste {
  @Input('disable-paste') disablePaste:boolean;

  constructor(private _elementRef:ElementRef) {}
  ngOnChanges() {
    if(this.disablePaste) {
      this._elementRef.nativeElement.onpaste = (e:any) => {
         e.preventDefault();
      }
    } else {
      this._elementRef.nativeElement.onpaste = null; 
    }
  }
}

1
投票

你可以试试这个:

@Directive({
  selector: '[disable-paste]'
})
export class DisablePaste {
  @Input('disable-paste')
  disablePaste:any;

  constructor(private _elementRef:ElementRef) {
    this._elementRef.nativeElement.onpaste = (e:any) => {
        e.preventDefault();
    }
  }
}

如果使用[...],您将获得与指定表达式的求值相对应的对象。没有它们,就是一个字符串值。

© www.soinside.com 2019 - 2024. All rights reserved.