Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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/4/powerbi/2.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
Angularjs 控制器、服务和其他方面的不同语法_Angularjs_Angularjs Scope - Fatal编程技术网

Angularjs 控制器、服务和其他方面的不同语法

Angularjs 控制器、服务和其他方面的不同语法,angularjs,angularjs-scope,Angularjs,Angularjs Scope,两者的区别是什么 app.controller("MyCtrl", function($scope, $http){ //... }); 及 即使两者给出相同的结果,也没有错误。事实上,第一种方法使代码更干净,编写起来更少。在服务、指令中也是一样的。有人能给我简单介绍一下吗。没有功能上的区别。使用.controller('ctrl',['$scope',function($scope){…}是为了允许正确读取缩小的版本 关于缩小的说明-AngularJS 由于Angular根据控制器构

两者的区别是什么

app.controller("MyCtrl", function($scope, $http){
    //...
});


即使两者给出相同的结果,也没有错误。事实上,第一种方法使代码更干净,编写起来更少。在服务、指令中也是一样的。有人能给我简单介绍一下吗。

没有功能上的区别。使用
.controller('ctrl',['$scope',function($scope){…}
是为了允许正确读取缩小的版本

关于缩小的说明-
AngularJS
由于Angular根据控制器构造函数的参数名称推断控制器的依赖关系,因此如果要缩小
MyCtrl
controller的JavaScript代码,其所有函数参数也将缩小,依赖关系注入器将无法正确识别服务

我们可以通过使用依赖项的名称(以字符串形式提供)对函数进行注释来克服此问题,这些依赖项不会缩小。提供这些注入注释的方法有两种:

  • 在保存字符串数组的控制器函数上创建$inject属性。数组中的每个字符串都是要为相应参数注入的服务的名称:

    function MyCtrl($scope, $http) {...}
    MyCtrl.$inject = ['$scope', '$http'];
    app.controller('MyCtrl', MyCtrl);
    
  • 使用内联批注,其中提供的不是函数,而是数组。此数组包含服务名称列表,后跟函数本身:

    function MyCtrl($scope, $http) {...}
    app.controller('MyCtrl', ['$scope', '$http', MyCtrl]);
    
  • 这两种方法都适用于任何可以由Angular注入的函数,因此由项目的样式指南决定使用哪一种

    使用第二种方法时,注册控制器时,通常会将构造函数内联作为匿名函数提供:

    app.controller('MyCtrl', ['$scope', '$http', function($scope, $http) {...}]);
    

    添加到wzVang的答案中。您可以遵循您的第一个语法

    .controller('ctrl', function($scope){
    });
    
    没有任何问题。它是可读的。但是你应该在生产中缩小你的代码。然后你可以使用

    .controller('ctrl', function($scope){
    });