AngularJS如何看它的其他参数

2013-11-14 14:59:22 +08:00
 coolicer
angular.module('xx',[]).
controller('xxx', function( $scope ){
$scope.name = 'xxxx';
});

....

controller里面,一般都有一个$scope,怎么可能知道其他的参数。
6177 次点击
所在节点    JavaScript
6 条回复
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){

}
])
这样就行了
coolicer
2013-11-14 16:41:36 +08:00
@windwhinny 尼玛,牛逼。我懂了,看着英文文档老看不到重点。
justfindu
2013-11-14 17:00:00 +08:00
@windwhinny via android 打这么多字 -0-
flyingnn
2013-11-15 00:28:58 +08:00
@windwhinny 说得好详细,不得不感谢啊。
teddy1004
2013-11-16 08:27:29 +08:00
@windwhinny 大赞啊!看了有种拨云见日的感觉
RobinFai
2013-11-20 10:13:33 +08:00
这个必须赞了...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/89252

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX