AngularJS控制器内部的功能

Pad*_*ter 48 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);
)};
Run Code Online (Sandbox Code Playgroud)

请帮助我理解这种类型的函数定义和在Angular/Javascript中允许的控制器内调用?

art*_*iak 72

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

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

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

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

...

$scope.someFn = someFn
Run Code Online (Sandbox Code Playgroud)

在上面的片段中,意图非常明确:可以someFn访问,同时保持someOtherFn私密.

顺便说一句.声明函数如:function nameFn(...){...}被称为函数语句 ; 你也可以这样做:( var nameFn = function(...) {...}所谓的函数表达式).这些之间略有不同 - 基本上它是非法的:

 someFn();
 var someFn = function(...) {...}
Run Code Online (Sandbox Code Playgroud)

然而,这有效:

 someFn();
 function someFn(...) {...}
Run Code Online (Sandbox Code Playgroud)

有时候,你不得不使用这种模式,我看如回答这个问题.