AngularJS:是否有必要将我的所有控制器方法绑定到$ scope

时间:2015-10-28 10:59:55

标签: angularjs methods scope method-declaration

我们什么时候需要将一个方法绑定到控制器中的$ scope,我正在处理只是在对象上映射操作的方法。

Example :
$scope.myVar = {};

     function myMyObject(x) {
          $scope.myVar = {
                  "xKey":x
           }

     }

    to 

    $scope.myMyObject = function(x) {
          $scope.myVar = {
                  "xKey":x
           }

     }

    myMyObject(10);
    $scope.myMyObject(10);
Is it necessary to bind $scope to myMyObject method here ?

4 个答案:

答案 0 :(得分:1)

仅在需要从View中调用方法时才将方法绑定到$scope。如果它们只是您只能从控制器本身调用的私有方法,则不需要污染范围。

在您的特定方案中,无需将myMyoObject()绑定到范围。

编辑:您可以完全避免使用$ scope并使用controllerAs语法,在这种情况下,您可以绑定到$ scope。非公共职能仍然不受任何限制。

答案 1 :(得分:1)

只能在HTML /视图中访问$ scope对象上定义的方法。来自ng-click,过滤器等的示例 - 如果不需要从html访问您的方法,则无需将其绑定到$ scope。

答案 2 :(得分:1)

作为一种好的做法,您可以在控制器中声明所有函数,然后仅将$ scope绑定到您需要的函数。

示例:

function _myHelperFunction(param) {
    //do some stuff
}

function myFunction(otherParam) {
    //do some stuff or use the _myHelperFunction
}

function myFunction2(otherParam) {
    //do some stuff or use the _myHelperFunction
}

function myFunction3(otherParam) {
    //do some stuff or use the _myHelperFunction
}

$scope.myFunction = myFunction
$scope.myFunction2 = myFunction2
$scope.myFunction3 = myFunction3

甚至更好的ES6解构

[$scope.myFunction, $scope.myFunction2, $scope.myFunction3] =
[myFunction, myFunction2, myFunction3]

或者:

angular.extend($scope, {
    myFunction,
    myFunction2,
    myFunction3
})

答案 3 :(得分:0)

在控制器本身保持独立功能。

将所有函数添加到$ scope将长期影响应用程序性能,并影响具有大型函数的复杂应用程序

只有当你想在html(view / partial)或child $ scopes中访问它时才在$ scope中写函数

在父$ scope中编写的函数可供子范围$ scopes

访问