2013-12-18 15 views
42

角モジュラコントローラがあるコードスニペットがありますが、同じコントローラの中に関数があり、これが私の心の中で許可されたコーディングの方法であることを疑うことがありますJavascriptまたはAngular?はいの場合、それをどのように読み取るのですか?私は以下のコードフォーマットを参照してください:AngularJSコントローラ内の機能

obj.controller('CartController',function($scope){ 

    $scope.totalCart = function(){ 
    var total = 10;  
    return total; 
    } 
    function calculate(){ 
    ...Some Logic.. 
    } 

    $scope.$watch($scope.totalCart, calculate); 
)}; 

をその関数定義のこのタイプであることを理解するために私を助けると角/ JavaScriptで許さコントローラ内にお電話ください!定義が許可されている

答えて

68

calculate()と同じ影響を与えたプライベート関数である - それはCartControllerの範囲でのみアクセス可能です。ビューで関数を使用する必要がない場合は、非公開にすることをお勧めします。それはで、はビューで使用することを目的としているため、他の誰かがこのコードを使用して作業する場合は、ビューで使用する前に2度考えてください。さらに、calculate内から、CartControllerの範囲でアクセス可能なすべてのオブジェクト(パラメータとしてCartControllerに渡されたオブジェクトを含む)にアクセスできます。

このように宣言された関数は、適切なJS functionです。つまり、その名前で参照することができます。意図は非常にされている上記のスニペットで

function someFn (...) { ... } 

function someOtherFn (...) { ... } 

... 

$scope.someFn = someFn 

:時にはあなたが/宣言する事前にあなたの関数を作成し、だけにして(この場合は$scopeに)いくつかの他のオブジェクトのプロパティに割り当てた場合、より読みやすいと考えられていますクリア:someOtherFnを非公開にして、someFnにアクセス可能にします。

Btw。次のような関数を宣言する:function nameFn(...){...}関数文と呼ばれます。あなたは非常に同様にそれを行うことができます:var nameFn = function(...) {...}(いわゆる関数式)。それらの間にわずかな違いがあります - 基本的にそれは違法です:

someFn(); 
var someFn = function(...) {...} 

のに対し、この作品:

someFn(); 
function someFn(...) {...} 
時々

あなたはこのパターンを使用するように強制されている、例えば見えます私のanswerからquestionへ。

+0

優秀な説明 – Padyster

1

、それは

$scope.$watch($scope.totalCart, function(){..some logic...}) 
4
$scope.launch = function (which) { 

}; 
var _func = function() {...} 
関連する問題