V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
coolicer
V2EX  ›  JavaScript

AngularJS如何看它的其他参数

  •  
  •   coolicer · 2013-11-14 14:59:22 +08:00 · 6135 次点击
    这是一个创建于 4018 天前的主题,其中的信息可能已经有所发展或是发生改变。
    angular.module('xx',[]).
    controller('xxx', function( $scope ){
    $scope.name = 'xxxx';
    });

    ....

    controller里面,一般都有一个$scope,怎么可能知道其他的参数。
    6 条回复    1970-01-01 08:00:00 +08:00
    windwhinny
        1
    windwhinny  
       2013-11-14 16:11:07 +08:00 via Android   ❤️ 11
    首""先回答你的问题,参数都在那个匿名函数的参数列表里。
    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
        2
    coolicer  
    OP
       2013-11-14 16:41:36 +08:00
    @windwhinny 尼玛,牛逼。我懂了,看着英文文档老看不到重点。
    justfindu
        3
    justfindu  
       2013-11-14 17:00:00 +08:00
    @windwhinny via android 打这么多字 -0-
    flyingnn
        4
    flyingnn  
       2013-11-15 00:28:58 +08:00
    @windwhinny 说得好详细,不得不感谢啊。
    teddy1004
        5
    teddy1004  
       2013-11-16 08:27:29 +08:00 via iPhone
    @windwhinny 大赞啊!看了有种拨云见日的感觉
    RobinFai
        6
    RobinFai  
       2013-11-20 10:13:33 +08:00
    这个必须赞了...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3646 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:31 · PVG 12:31 · LAX 20:31 · JFK 23:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.