2016-11-16 7 views
0

Angular 2プロジェクトに古いJavaScriptモジュールを追加しようとしていて、親スコープにアクセスする際に問題が発生しました。匿名関数に親スコープを追加する - JavaScriptをAngular 2に追加する

let testString = "Parent Scope Accessed!"; 

Object.keys(data).forEach((function(Key, Index) { 
    if(filter.type == 'parameter') { 
     Object.keys(dirArray).forEach(function(dirKey, dirIndex) { 
     linkArray = dirArray[dirKey]; 
     if(filter.dir == 2) { //Direction filter 
      Object.keys(linkArray).forEach(function(linkKey, linkIndex) { 
      if(filter.type != 'sub')) { 
       dataObject = linkArray[linkKey]; 

       //ERROR with scoping occurs below. Need to add parent scope. 
       console.log(this.testString); 
      } 
      }); 
     } 
     }); 
    } 
})); 

私はこのような何かをしようとしました:

let testString = "Parent Scope Accessed!"; 

Object.keys(data).forEach((function(Key, Index) => { 
    if(filter.type == 'parameter') { 
     Object.keys(dirArray).forEach(function(dirKey, dirIndex) => { 
     linkArray = dirArray[dirKey]; 
     if(filter.dir == 2) { //Direction filter 
      Object.keys(linkArray).forEach(function(linkKey, linkIndex) => { 
      if(filter.type != 'sub')) { 
       dataObject = linkArray[linkKey]; 

       //ERROR with scoping occurs below. Need to add parent scope. 
       console.log(this.testString); 
      } 
      }); 
     } 
     }); 
    } 
})); 

しかし、それは問題の全く新しいセットを与えるが、少なくとも、IDEは親スコープが追加されていることを示しています。私は '=>'構文を正しく使用していないと仮定します。これを行うより良い方法はありますか?

+0

「Object.keys(data).forEach((Key、Index)=> { ...}); '? –

+0

ありがとうHarry - functionキーワードを削除する必要がありました。不足している関数のクラス101です。 – fila

+0

これは101ではありません; –

答えて

1

ドロップfunction単語とちょうど脂肪の矢印を使用し、=>、関数を定義

let testString = "Parent Scope Accessed!"; 

Object.keys(data).forEach(((Key, Index)=> { 
    if(filter.type == 'parameter') { 
     Object.keys(dirArray).forEach((dirKey, dirIndex)=> { 
     linkArray = dirArray[dirKey]; 
     if(filter.dir == 2) { //Direction filter 
      Object.keys(linkArray).forEach((linkKey, linkIndex)=> { 
      if(filter.type != 'sub')) { 
       dataObject = linkArray[linkKey]; 

       //ERROR with scoping occurs below. Need to add parent scope. 
       console.log(this.testString); 
      } 
      }); 
     } 
     }); 
    } 
})); 

OR

変数(この場合はvar that)でルートthisを定義します。

var that = this; 
let testString = "Parent Scope Accessed!"; 

Object.keys(data).forEach((function(Key, Index) => { 
    if(filter.type == 'parameter') { 
     Object.keys(dirArray).forEach(function(dirKey, dirIndex) => { 
     linkArray = dirArray[dirKey]; 
     if(filter.dir == 2) { //Direction filter 
      Object.keys(linkArray).forEach(function(linkKey, linkIndex) => { 
      if(filter.type != 'sub')) { 
       dataObject = linkArray[linkKey]; 

       //ERROR with scoping occurs below. Need to add parent scope. 
       console.log(that.testString); //Use that instead of this here to refer to the parent scope 
      } 
      }); 
     } 
     }); 
    } 
})); 
+0

これは完全に機能しました。私は '=>'構文を正しく使用していないことを知っていました。ありがとうございました。 – fila

関連する問題