AngularJS控制器内部的function

我有代码片段,其中有一个angular模块控制器,但有一个function在同一个控制器内,并与一个调用,这是在我的脑海里提出疑问,这是在Javascript或Angular允许的编码方式? 如果是,那么它是如何读取的? 看下面的代码格式我有:

obj.controller('CartController',function($scope){ $scope.totalCart = function(){ var total = 10; return total; } function calculate(){ ...Some Logic.. } $scope.$watch($scope.totalCart, calculate); )}; 

请帮我理解,这是在Angular / Javascript中允许的控制器中的这种types的函数定义和调用?

calculate()是一个私有函数 – 它只能在CartController的范围内CartController 。 如果你不需要在视图中使用你的function,那么把它变成私有是个好主意。 它表示它并不打算在视图中使用,所以如果其他人将使用这个代码,应该在视图中使用它之前三思。 此外:从内部calculate您可以访问在CartController范围内可访问的所有对象(包括作为parameter passing给CartController对象)。

以这种方式声明的函数是一个合适的JS function ,这意味着你可以通过它的名字来引用它。 有时候,如果你事先声明/创build你的函数,然后把它们赋值给其他对象的属性(在这个例子中是$scope ),它会被认为更具可读性:

 function someFn (...) { ... } function someOtherFn (...) { ... } ... $scope.someFn = someFn 

在上面的片段中,意图是非常明确的:使someFn可访问的,同时保持一些其他的私有。

顺便说一句。 声明如下函数: function nameFn(...){...}被称为函数语句 ; 你可以非常类似地这样做: var nameFn = function(...) {...} (所谓的函数expression式 )。 这两者之间有一点区别 – 基本上是非法的:

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

然而,这工作:

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

有时你被迫使用这种模式,例如看看我对这个问题的回答 。

 $scope.launch = function (which) { }; var _func = function () {...} 

该定义是允许的,它具有与。相同的影响

 $scope.$watch($scope.totalCart, function(){..some logic...})