2017-05-06 17 views
0

イベントに関連付けられた機能を動的に変更したいと考えています。 「:式が期待された場所ガット補間({{}})パーサーエラー」:私はこの試みたイベントの関数名を角度2で変更しますか?

(click) = "{{myFunction}}" 

をしかし、私はエラーを取得します。 条件に応じて、TypeScriptのmyFunctionを1つまたは他の関数に変更する必要があります。

+0

。どのようにしてコンポーネント内の異なるメソッド名を知ることができますか?すべてのメソッド名を抽出し、バインドするものを見つけなければなりません。つまり、それに応じてテンプレートを変更する必要があります。 – wannadream

+0

ユーザーがボタンをクリックすると何かが画面に表示されますが、エラーを回避するために同じ機能を実行する前にボタン機能を数秒間無効にする必要があります。だから、ユーザーがクリックした後、私は関数名を数秒間何に変更してからそれを元に戻します。 – user33276346

+0

イベント名を置き換えることは出来ません。ブール値を[無効]にバインドして、可用性を制御することができます。 – wannadream

答えて

0

私はあなたのためplunkerを作成:https://plnkr.co/edit/se3kz5AF4sSmgHue8W7u?p=preview

onImgClick() { 
    if(this.imgDisabled){ 
     console.log('img disabled'); 
     return; 
    } 
    alert('clicked'); 
    this.imgDisabled = true; 
    console.log('img disabled'); 
    let that = this; 
    setTimeout(() => { 
     that.imgDisabled = false; 
     console.log('img enabled'); 
    }, 5000); 
} 
+0

'that'を使う目的は何ですか? –

+0

this in()=> {this。 }は関数の参照になります。あなたはそれを使ってコンポーネントにアクセスする必要があります。 – wannadream

+1

あなたは矢印の機能を骨組みにする必要があります。 'this 'in'()=> {this。 } '**は「関数の参照」ではありません**。これは、それが一部であるオブジェクトである 'onImgClick'からの' this'です。この概念は矢印関数の基本です。 –

1
​​
+0

ご協力ありがとうございます。私はこのパターンをどこか他のところで見たと信じています。名前はありますか? – user33276346

0

何をしようとするための技術的な用語は、 "スロットリング" です。それを探してみてください。多くのライブラリがその機能を何らかの形で提供します。多くの場合、それは「高次関数」として実装されています。これは、基底の関数を取り込み、それを抑制した関数を返す関数です。基本的なロジックは以下のとおりです。あなたのコンポーネントで今

function throttle(fn, ms) { 
    let last = 0; 

    return function() { 
    const now = +new Date(); 

    if (now > last + ms) { 
     last = now; 
     fn.apply(this, arguments); 
    } 
    }; 
} 

:つもりな作業ではありません

(click)="myFunction()" 

myFunction = throttle(this.click); 
関連する問題