为什么AngularJS中有一个依赖项注入,用关键字value传递值,而不使用var

为什么AngularJS中有一个依赖项注入,用关键字value传递值,而不使用var,angularjs,dependency-injection,Angularjs,Dependency Injection,我知道AngularJS有一些依赖注入技术。因此,如果代码为和mainApp.value(“defaultInput”,5);将数据传递给控制器 //定义一个模块 var mainApp=angular.module(“mainApp”,[]); //创建一个值对象作为“defaultInput”,并向其传递一个数据。 主应用程序值(“默认输入”,5); ... //使用其名称“defaultInput”将值注入控制器 mainApp.controller('CalcController',函数

我知道AngularJS有一些依赖注入技术。因此,如果代码为和mainApp.value(“defaultInput”,5);将数据传递给控制器

//定义一个模块
var mainApp=angular.module(“mainApp”,[]);
//创建一个值对象作为“defaultInput”,并向其传递一个数据。
主应用程序值(“默认输入”,5);
...
//使用其名称“defaultInput”将值注入控制器
mainApp.controller('CalcController',函数($scope、CalcService、defaultInput){
$scope.number=默认输入;
$scope.result=CalcService.square($scope.number);
$scope.square=函数(){
$scope.result=CalcService.square($scope.number);
}
});

为什么不在模型定义之前声明var defaultInput=5?为什么要在AngularJS中创建一个具有价值的新语法糖?既然你已经有了选择,为什么还要创造全新的东西呢?为什么要把事情复杂化?

是的,你可以做到,区别在于

如果使用var,则上下文仅对特定控制器可用。如果要在另一个控制器中声明,则需要使用另一个var并赋值


当您使用.value时,它的行为就像一个全局常量,因此每当您需要使用该值时,您可以只注入该值并跨控制器使用。

您不应该执行这两个选项中的任何一个。相反,您应该在服务中存储全局值。您能详细说明我为什么要这样做吗?因为下面的网站显示这是一个合理的选择:要深入讨论DI,请参阅Martin Fowler在Wikipedia上的文章,或者阅读您最喜欢的软件设计模式书中关于DI的内容。另请参见。我投票结束这个问题,因为它是一个关于依赖注入利弊的讨论,而不是一个关于特定软件问题的问题。@mvr950的可能复制有几个原因,但简单的答案是,对于全局变量,使用工厂是一种更强大、更安全的方法。这些好处的一些例子是AngularJS工厂是单例的、封装的,除非有必要,否则它们不会被初始化(即内存优势)。