2016-03-28 11 views
1

入力にコスチューム属性ディレクティブを設定しようとしていますが、その方法を見つけることができませんでした。私はちょうど入力して、独自でディレクティブを置く場合Angular2のコスチューム属性ディレクティブを設定する

私のディレクティブは、以下の

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

で、それが動作します。しかし、私はそれを "条件付きで"使用しようとすると、それはdoesntです。 私はこれらすべてを試してみました:

<input [disable-paste]="doNotAllowPaste" ... /> 
<input disable-paste="doNotAllowPaste" ... /> 
<input [attr.disable-paste]="doNotAllowPaste" ... /> 

答えて

1

あなたはこの試みるcoulsd:あなたは[...]を使用する場合は、指定した式の評価に対応するオブジェクトを取得します

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

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

を。それらがなければ、文字列値。

+0

これは良い選択肢であるが、私は条件付きの方法があったかどうかを知りたいと思いましたそのディレクティブを入力しなくてもレンダリングすることができます。 –

+0

ちょっとばかげた質問です。あなたがその行動をしていない場合、なぜディレクティブを適用しないのですか?このディレクティブにはいくつかのものがあります。あなたの問題をよりよく理解しようとする;-) Angular2は一般に別の属性を混ぜて無効にします。例: 'selector: 'フォーム:not([ngNoForm]):not([ngFormModel])、ngForm、[ngForm]''。 https://github.com/angular/angular/blob/master/modules/angular2/src/common/forms/directives/ng_form.ts#L81をご覧ください。 –

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; 
    } 
    } 
} 
関連する問題