Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义角度控制器函数内部函数的最佳实践_Javascript_Angularjs - Fatal编程技术网

Javascript 定义角度控制器函数内部函数的最佳实践

Javascript 定义角度控制器函数内部函数的最佳实践,javascript,angularjs,Javascript,Angularjs,在angular 1.X中,我们可以如下定义作用域函数,我们想知道在作用域中定义函数的最佳实践是什么。 请帮助我了解以下任何一种方法是否优于其他方法 // first approach angular.controller("MyController", function() { $scope.firstFun = function() { // do something here }; }); // second approach var firstFun = functio

在angular 1.X中,我们可以如下定义作用域函数,我们想知道在作用域中定义函数的最佳实践是什么。 请帮助我了解以下任何一种方法是否优于其他方法

// first approach
angular.controller("MyController", function() {
  $scope.firstFun = function() {
    // do something here
  };
});

// second approach
var firstFun = function($scope) {
  return function() {
    //use scope here and declare logic also
  };
};
angular.controller("MyController", function() {
  $scope.firstFun = firstFun($scope);
});

我个人更喜欢第一种声明函数的方法。使用一种方法比使用另一种方法没有额外的好处。事实上,在第二种方法中,您需要额外编写几行代码。您可以使用任何您觉得更方便的方法。

在我看来,有一种方法比您列出的两种方法更好,如下所示:

(function (angular) {
    "use strict";

    angular.module("YourModule")
        .controller("MyController", MyController);

    function MyController() {
        var ctrl = this;
        // All controller functions and variables bindings 
        // will be listed below, in alphabetic order
        ctrl.firstFun = firstFun;
        ctrl.myName = "name";

        function firstFun() {
        }
    }
}(angular));

我不认为短代码就是写得好的代码。因此,如果我是你,我会尝试一下。

你缺少控制器的$scope参数。回答最佳实践并不是本网站的真正目标;通常,最佳实践类型的问题是自以为是的,可以有多个有效答案。这个网站更专注于解决代码中的问题。也就是说,有一个由John Papa编写的angular风格指南。在控制器内部访问$scope是一种反模式,只能作为最后手段。我支持约翰·帕帕的《风格指南》的建议,但我要补充一点,它有点过时了。如果您正在Angular 1.5.x中编写新代码,您应该尽可能多地使用组件。通过第二种方法,开发人员可以在多个控制器中重用该函数。好的,这不是最好的模式,这不是角度的方式,它告诉我们要为此编写服务,但这是一个好处。