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...})