windwhinny
2013-11-14 16:11:07 +08:00
首""先回答你的问题,参数都在那个匿名函数的参数列表里。
controller(name,fun)
fun是controller的构建函数,我们需要依赖一些其它库来构建一个controller。这个时候angular就用到了一项技术,叫做依赖注入,dependency inject。
比如说我新建一个controller,需要从服务器上获取点数据,也就是ajax,angular.有个对应的库叫做$http。代码就这样写:
controller("myctrl",function($scope,$http){
....
})
这时候你就可以在构建函数内访问并$http了。如果根据业务扩展的需要,我还要获得并修改浏览器的url,这时候就需要$location:
controller("myctrl",function($scope,$location,$http){
....
})
把$location和$http的位置颠倒也没问题。也就是说如果你需要什么库,直接在构造函数的参数里把需要的东西写出来就行了,angular会自动获取那个库并传递给构造函数。有没有觉得很神奇?!
angular是怎么知道构造函数的参数是什么的?
(function($scope,$http,$location){}).toString()
运行这段代码你就懂了。toString可以将函数的源代码输出成字符串,通过解析这段字符串来得知他的参数以及名称。
但是这样会遇到一个问题,当我使用压缩工具来压缩源码之后,函数的参数名都会变,怎么办?
function($scope,$location,$http){}
压缩后成了
function(a,b,c){}
这时候就需要将构建函数替换为一个数组,数组最后一个元素为构建函数,其它为参数。
controller("myctrl",[
"$scope",
"$location",
"$http",
function(scope,location,http){
}
])
这样就行了