2017-06-21 5 views
0

私はいくつかのAngular 1.5.3コードを書いていますが、$ scope関数で別のスコープ関数を呼び出している状況については疑問に思っています。

など。

$scope.clickMe = function() { 
    $scope.myFunction(); 
} 

$scope.myFunction = function() { 
    console.log('yadda'); 
} 

これを実行すると内部で何が起こっているのですか?それは悪い習慣ですか?

は、それがこれを行うには、より良いです:

function myFunction() { 
    console.log('yadda'); 
} 

$scope.clickMe = function() { 
    myFunction(); 
} 

$scope.myOtherFunction= function() { 
    myFunction(); 
} 
+0

私はこれが奨励されていないと確信しています。 $ scope.myFunction = function(){ myFunction(); } – CrazyMac

+0

'scope'とそのprivateで' myFunction'を使用していないので、そのスコープから 'scope'を削除してください。 –

答えて

0

それは悪い習慣ではありません。 AngularJSは、あなたがどこから呼び出されたのかを気にしません。唯一の「問題」はあなたの$scopeの汚染であるかもしれません。

$scopeは、JavaScriptで他のObjectのようなプロトタイプの継承を持っているとすれば、かなり早く汚染される可能性があります。ネストされた$scopeを作成するたびに、すべての親プロパティとメソッドが継承されます。このため、子コンポーネント/コントローラーに継承させたり、テンプレートからアクセスする必要がある場合を除き、プロパティ/メソッドを$scopeのままにしておく方がよいでしょう。

0

コードの最初のスニペット。すべての機能を$scopeオブジェクトに接続します。

$scope.clickMe = function() { 
    $scope.myFunction(); 
} 

$scope.myFunction = function() { 
    console.log('yadda'); 
} 

このように、ネストスコープがあるとします。親スコープのすべてのプロパティと関数は、その子スコープで使用できます。また、view/templateからこれらのプロパティと関数にアクセスすることもできます。

一方、もう一方のスニペットでは、すべての関数とプロパティを子スコープに継承する必要はありません。この場合、myFunctionはこのスコープ内で使用できます。つまり、このスコープ内の関数だけがこの関数を呼び出したりアクセスしたりできます。また、view/templateからこの関数にアクセスすることはできません。このスコープ用のプライベート関数は表示されません。

function myFunction() { 
    console.log('yadda'); 
} 

$scope.clickMe = function() { 
    myFunction(); 
} 

$scope.myFunction = function() { 
    myFunction(); 
} 

これはあなたに適したものを決定するために与えられています。私が個人的に感じるところでは、第二のアプローチがより良いです。あまりにも多くの論理をスコープに付けることは、スコープを汚染するので、良い習慣ではありません。これらの関数は、子/ネストされたスコープで使用可能で、ビュー/テンプレートからアクセス可能にしたいスコープにアタッチすることができます。残りはそのスコープにプライベートにすることができます。

For refrence See this Question

はそれが役に立てば幸い:)

関連する問題