【问题标题】:Function inside the AngularJS ControllerAngularJS 控制器内部的函数
【发布时间】:2013-12-18 09:23:35
【问题描述】:

我有代码 sn-p,其中有一个 Angular 模块化控制器,但在同一个控制器中有一个函数并带有一个调用,这让我怀疑 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 中允许在控制器内调用吗?

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

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

    以这种方式声明的函数是一个正确的JSfunction,这意味着你可以通过它的名字来引用它。有时,如果您提前声明/创建函数,然后将它们分配给其他对象的属性(在这种情况下为 $scope),有时会被认为更具可读性:

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

    在上面的 sn-p 中,意图非常明确:使someFn 可访问,同时保持someOtherFn 私有。

    顺便说一句。声明函数如:function nameFn(...){...} 被称为 函数语句;你可以非常相似地这样做:var nameFn = function(...) {...}(所谓的函数表达式)。它们之间有细微的差别——基本上是非法的:

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

    然而,这是可行的:

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

    有时你不得不使用这种模式,例如:在我的answer 到这个question

    【讨论】:

    • 优秀的描述
    【解决方案2】:
    $scope.launch = function (which) {
    
    };
    var _func = function () {...}
    

    【讨论】:

      【解决方案3】:

      定义是允许的,效果和

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-04
        • 2015-07-29
        • 1970-01-01
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        相关资源
        最近更新 更多