2017-03-08 7 views
1

グリッドにコンテキストメニュー項目を追加するには、文書hereに従っています。問題は、getContextMenuItems(この例では)のスコープから、コンポーネント内の他のメソッドや変数にアクセスできないということです。これは可能ですか?以下の例:コンテキストメニューを使用してスコープを設定する

private varIWantToAccess: boolean = false; 

function getContextMenuItems(params) { 
    var result = [ 
    { // custom item 
     name: 'Alert ' + params.value, 
     action: function() 
    { 
     window.alert('Alerting about ' + params.value); 
     this.varIWantToAccess = true; // Builds fine, but throws a run time exception, since this "this" context is different than the one that has "varIWantToAccess" 
    } 
    }, 
     .... 
     return result; 
} 

ありがとう!

+0

をコンテキストを渡します。同様の問題:[参照が範囲外であるため、角5/4/2メソッドが渡されました](https://stackoverflow.com/questions/48557364/1417185) – Paritosh

+0

[角度5/4/2のメソッドが重複している可能性があります。範囲外](https://stackoverflow.com/questions/48557364/angular-5-4-2-method-passed-as-reference-is-not-in-scope) – Paritosh

答えて

0

私は、TypeScriptを使用して角度2または4のコンポーネントについて話していることを前提としています。 それでは太い矢印を使用して関数に接続してください。

例:

gridOptions.getContextMenuItems =() => this.getContextMenuItems(); 

これはあなたが必要スコープを提供する必要があります。

0

あなたは、グリッドのコンテキストでthisへの参照を追加することができます -

this.gridOptions.context = { 
        thisComponent : this 
       }; 

をそして、thisComponentは以下のようにアクセスすることができます - 同じ

private getContextMenuItems(params) { 
    console.log(params); 
    var result = [ 
     { // custom item 
      name: 'Sample', 
      action: function() {params.context.thisComponent.callMe(); }, 
      icon: '<i class="fa fa-pencil" />' 
     }]; 
    return result; 
} 

cellRendererのような他のコールバックのために行うことができます。

0

アイテムに親コンテキストプロパティを提供する必要があります。 サンプルコンテキストメニュー項目:

{名: 'BreakoutReport' アクション:関数(){ this.context.isDrillDownData = FALSE; this.context.isBreakOutReport = true; this.context.populateBreakOutGrid(); }、 cssClasses:[ 'redFont'、 '太字']、 無効:!params.value.drillDownReport、 コンテキスト:params.context }ここで

、this.contextは、すべての親機能へのアクセスを持っています。 このコンテキストは、まずグリッドオプションで設定してから、コンテキストメニュー項目に転送する必要があります。

第一ステップ:gridOptionsで設定コンテキスト

getGridOption() { 
      return { 
       getContextMenuItems: this.getContextMenu, 
       context: this//pass parent context 
      }; 
     } 

第二ステップ:これは実際にAG-グリッドに関連していないコンテキストメニューのサブ項目に

getContextMenu(params) { 
    const result = [ 
     { 
      name: 'Drilldown Report', 
      action: function() { 
       this.context.populateDrillDownReport();//access parent context using this.context inside the function. 
      }, 
      cssClasses: ['redFont', 'bold'], 
      disabled: !params.value.drillDownReport, 
      context: params.context//pass parent context 
     }, 
     'separator', 
     'copy', 
     'copyWithHeaders']; 
    return result; 
} 
関連する問題