AngularJS控制器到底是如何定义的?

And*_*ili 2 javascript javascript-framework angularjs angularjs-controller

我有一个与控制器的语法以及在AngularJS中声明它们的方式有关的问题。我相当确定我知道它们是如何工作的,但是我的问题与语法有关。

所以我可能会有这样的事情:

// MODULE:
var weatherApp = angular.module("weatherApp", ['ngRoute', 'ngResource']);

// Home Page Controller:
weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
Run Code Online (Sandbox Code Playgroud)

第一行声明weatherApp变量,它是我的模块,并且与我的页面相关联。并且module()是一种以模块名称和该模块使用的依赖项列表为参数的方法。那正确吗?

主要问题与控制器定义有关。

weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
Run Code Online (Sandbox Code Playgroud)

在上一个weatherApp变量(我的模块)上,我调用controller()方法来设置控制器设置。因此,第一个参数是控制器名称(homeController在这种情况下),然后是一个数组,该数组首先必须包含依赖项列表(在这种情况下,只有$scopeAngularJS提供的服务),而最后一个元素是一个将这些依赖项作为实现控制器行为的输入参数。

为什么Angular会这样做?为什么依赖关系和实现控制器的功能在单个数组中一起传递?

也许我在理解这种行为方面有些困难,因为我来自Java背景,在该背景下,数组不能包含不同类型的对象,而函数不是对象。

Mag*_*.fr 5

坏:

weatherApp.controller('homeController', function($scope){
    // Controller business operation   
});
Run Code Online (Sandbox Code Playgroud)

当这被最小化时,参数也被最小化,并且角度将不再能够知道要注入哪些依赖项。

好:

weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
Run Code Online (Sandbox Code Playgroud)

数组语法:字符串中的依赖项使缩小变得安全。

其他正确方法:

您也可以分别注入依赖项:

function WeatherCtrl($scope, $http) {
    // Controller business operation   
}
WeatherCtrl.$inject = ['$scope'];
weatherApp.controller('WeatherCtrl', WeatherCtrl);
Run Code Online (Sandbox Code Playgroud)