在angularJS中使用DI的正确方法

时间:2015-11-19 16:18:23

标签: angularjs

我见过人们在参数中使用数组

[HttpPost]
[Route("update")]
[ValidateAntiForgeryToken]
public ActionResult Update(int id)
{
    try
    {
        Update(id);
    }
    catch (Exception exception)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest, exception.Message);
    }
}

另一方面,我也看到了以下代码,两者都在工作

myAngularApp.controller("nameOfController", ["$firstDependency", "$secondDependency", function ($firstDependency, $secondDependency) {

// code here
}]);

在角度文档中,我看到了数组的使用。为什么角度允许后一种方法?哪一个绝对推荐?事实上,在角度文档示例中,指令不使用数组。

2 个答案:

答案 0 :(得分:2)

$ injector必须知道要注入函数的参数。有三种不同的方法可以告诉注射器注射什么。

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

FN。$注入= [ '$ firstDependency', '$ secondDependency']

选项2:使用类似注释的数组:

['$ firstDependency','$ secondDependency',function(x,y){...}]

选项3:如果没有$ inject属性且没有注释,AngularJS使用函数参数:

function($ firstDependency,$ secondDependency){...}。

如果缩小代码,则不能使用第三种替代方法,因为这会更改参数名称。

这三种方法都是合法的,并提供相同的结果。

答案 1 :(得分:1)

我建议使用第一种方法:

myAngularApp.controller("nameOfController", ["$firstDependency", "$secondDependency", function ($firstDependency, $secondDependency) {

// code here
}]);

这是因为您可以使用此方法缩小代码,而不能使用您列出的其他方法。