Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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 AngularJS控制器是如何定义的?_Javascript_Angularjs_Javascript Framework_Angularjs Controller - Fatal编程技术网

Javascript AngularJS控制器是如何定义的?

Javascript AngularJS控制器是如何定义的?,javascript,angularjs,javascript-framework,angularjs-controller,Javascript,Angularjs,Javascript Framework,Angularjs Controller,我有一个关于控制器的语法以及它们在AngularJS中声明的方式的问题。我很确定我知道它们是如何工作的,但我的问题与语法有关 所以我可能会有这样的想法: // MODULE: var weatherApp = angular.module("weatherApp", ['ngRoute', 'ngResource']); // Home Page Controller: weatherApp.controller('homeController', ['$scope', function($s

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

所以我可能会有这样的想法:

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

// Home Page Controller:
weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
第一行声明了
weatherApp
变量,它是我的模块,与我的页面关联。而
module()
是一种将模块名称和此模块使用的依赖项列表作为参数的方法。是这样吗

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

weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
在前面的
weatherApp
变量(我的模块)中,我调用
controller()
方法来设置控制器设置。因此,第一个参数是控制器名称(在本例中为
homeController
),后面是一个数组,该数组首先必须包含依赖项列表(在本例中,只有AngularJS提供的
$scope
服务)最后一个元素是一个函数,它将这些依赖项作为实现控制器行为的输入参数

为什么要这样做?为什么依赖项和实现控制器的函数都在一个数组中传递


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

Angular这样定义控制器,因为缩微器重命名参数(例如$scope)在控制器方法中,它打破了Angular的依赖注入机制。请参阅:

坏:

weatherApp.controller('homeController', function($scope){
    // Controller business operation   
});
weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
当这被缩小时,参数被缩小,angular将不再能够知道要注入哪些依赖项

好:

weatherApp.controller('homeController', function($scope){
    // Controller business operation   
});
weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
数组语法:字符串中的依赖项使缩小安全

其他正确方式:

weatherApp.controller('homeController', function($scope){
    // Controller business operation   
});
weatherApp.controller('homeController', ['$scope', function($scope) {
    // Controller business operation   
}]);
您还可以单独注入依赖项:

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

$injector
必须知道要将哪些参数注入函数。有三种不同的方法告诉喷油器要注射什么

选项1:向函数添加名为
$inject
的属性:

FN.$inject=['a','b']
选项2:使用类似数组的注释:

['a','b', function(x,y) {...}]
选项3:如果没有
$inject
属性且没有注释,AngularJS将使用函数参数:

function ('a','b') {...}.
您必须始终使用依赖项的名称,这里是
a
b
,而不是依赖项本身

您的示例使用第二种选择

如果缩小代码,则不能使用第三种选择,因为这将更改参数名称

var app = angular.module('app',[])

//with this app reference you define controller like this

app.controller('myCtrl',['$scope',function($scope){

   //your stuff


}])
//在这里,我附加了尽可能简单的运行代码

var-app=angular.module('myApp',[])
app.controller('myCtrl',['$scope',函数($scope){
$scope.name=“rahul”;
}])

//这里首先包含角度库
/*单向绑定表达式*/
{{name}}
//双向绑定的ng模型

这主要是为了避免缩小/编译错误。我可以向您推荐以下样式指南:。也许对于初学者来说,遵循风格指南是一件好事,这样你就不会学到错误的东西