2013-12-18 38 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() {...} 
相关问题