0

にカスタムコンポーネント内の角度NGクリックディレクティブを実行するために、私は、ユーザーが彼または彼女がクリックngの上で起こることを望んでいるかを定義することができます分離株スコープを使用して、カスタムアイコンコンポーネントを持っている:どのキーを押して入力し

<ers-icon name="history" ng-click="ctrl.clickAlert('history')"></ers-icon> 
次のように

これは、ユーザーのコントローラ内からメソッドを呼び出します。

this.clickAlert = function (icon) { 
    alert("You selected the " + icon + " icon."); 
} 

私は上記の持っているから、私のhtml要素に、他のコードを追加することなく、アイコンコンポーネントにキー機能を入力追加する必要があります。ですから、本質的に指示文の中からEnterキーを押して、ers-iconのng-click指示文を評価してください。ここで私は、アイコンディレクティブとして持っているものです。

// on click works fine 
.on("click", (event:JQueryEventObject):void => { 
      if (this.ngDisabled) { 
       event.preventDefault(); 
       event.stopPropagation(); 
      } 
     }); 
    } 


//execute whatever function is specified inside ng-click on enter key press 
.on("keydown", (event:JQueryEventObject):void => { 
     if (event.keyCode === 13) { 
       if (this.ngDisabled) { 
        event.preventDefault(); 
        event.stopPropagation(); 
       } else { 
        // need to execute ng-click here 

        // this try doesn't work, gives me undefined 
        $scope.$apply(() => { 
         $scope.$eval($attr.ngClick); 
        } 
       } 
      } 
     }); 

これは、キーを押して入力します。上の細かい動作しますが、私は実行するためにクリックngの上に定義されたコントローラ機能を取得することはできません。

おそらく$ evalや$ parseはうまくいくと思いましたが、それらは{{}}内の式しか評価しないようです。そのng-click属性を実行する最善の方法は何ですか?ユーザーがEnterキーを押すと、「this.clickAlert」機能が実行され、アラートが画面に表示されます。

私は上記のようにコードを変更することはできません。オンキーダウンリスナーのelse文で解決策を探しています。

+0

はあなたにもディレクティブのスコープで関数としてngClickを渡すと、それを呼び出すために試すことができます$ evalの – btinoco

+0

を使用することをお勧めいけません。 スコープ:{ ngClick: '&' } ディレクティブのリンク関数では、この$ scope.ngClickのように呼び出すことができます。この例を参照してください.http://codepen.io/btinoco96/pen/qqYPPp?editors = 1011 – btinoco

+0

"$ scope.ngClick"という構文エラーが表示されているようです。 "代入または関数呼び出しを期待しています" – bschmitty

答えて

1

私はそれをこのように解決:

.on("keydown", (event:JQueryEventObject):void => { 
    if (event.keyCode === 13) { 
      if (this.ngDisabled) { 
       event.preventDefault(); 
       event.stopPropagation(); 
      } else { 
       // need to execute ng-click here 
       this.element.trigger("click"); 
      } 
     } 
    }); 
関連する問題