2013-12-18 40 views
42

我有一個代碼片斷,其中有一個Angular Modular Controller,但是在同一個控制器和一個調用中有一個函數,這讓我懷疑這是這種編碼方式允許的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範圍訪問。如果你不需要在視圖中使用你的功能,把它變成私有是個好主意。它說這是而不是打算在視圖中使用,所以如果別人將這個代碼工作,應該在視圖中使用它之前三思。此外:從calculate內,您可以訪問在CartController範圍內可訪問的所有對象(包括作爲參數傳遞給CartController的對象)。

以這種方式聲明的函數是一個合適的JS function,這意味着您可以通過它的名稱獲得對它的引用。有時,它被認爲是如果你聲明/提前製作功能,然後纔將其分配給其他對象的屬性(在這種情況下,$scope)以增加可讀性:

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

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

... 

$scope.someFn = someFn 

在上面的代碼的意圖是非常明確:使someFn可訪問,同時保持someOtherFn私密。

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() {...} 
相關問題