AngularJS控制器内部的功能

时间:2013-12-18 09:23:35

标签: javascript angularjs

我有代码片段,其中有一个Angular Modular Controller,但是在同一个控制器内部有一个函数并且有一个调用,这在我的脑海中引起了怀疑,这是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中允许的控制器内调用?

3 个答案:

答案 0 :(得分:72)

calculate()是一个私有函数 - 只能在CartController范围内访问。如果您不需要在视图中使用您的功能,最好将其设为私有。它表示要在视图中使用,因此如果其他人将使用此代码,请在视图中使用它之前再三思。此外:从calculate开始,您可以访问CartController范围内可访问的所有对象(包括作为参数传递给CartController的对象)。

以这种方式声明的函数是一个合适的JS function,这意味着您可以通过其名称来引用它。有时,如果您提前声明/创建函数并将其分配给其他对象的属性(在本例中为$scope),则认为它更具可读性:

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

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

...

$scope.someFn = someFn

在上面的代码段中,意图非常明确:可以访问someFn,同时保持someOtherFn私有。

顺便说一下。声明像function nameFn(...){...}这样的函数被称为函数语句;您可以非常类似地执行此操作:var nameFn = function(...) {...}(所谓的函数表达式)。这些之间略有不同 - 基本上它是非法的:

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

然而,这有效:

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

有时你被迫使用这种模式,例如在我的answer到此question

答案 1 :(得分:4)

$scope.launch = function (which) {

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

答案 2 :(得分:1)

允许定义,它与

具有相同的效果
$scope.$watch($scope.totalCart, function(){..some logic...})