IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    AngularJS中的依赖注入和服务(service)

    云自无心水自闲发表于 2015-02-09 11:28:00
    love 0


    在前文(http://www.blogjava.net/usherlight/archive/2015/02/01/422633.html)中我们曾经介绍过,定义controller时,需要2个参数,第一个参数是controller的名称,第二个参数是一个数组,数组的最后一个元素将是controller的函数,前面的参数是controller的依赖项。我们现在就来仔细分析一下其中的具体过程。

    先给一个例子:
    angular. module('notesApp' , [])
    . controller('MainCtrl' , ['$log' , function($log) {
    var self = this;
    self. logStuff = function() {
    $log. log('The button was pressed' );
    };
    }])

    在这个例子中可以看到,我们在第一个参数中用字符串(服务名称)添加了一个依赖项。当我们通过字符串声明了这一个服务之后,我们就可以把它当作一个变量注入到函数中。AngularJS会自动查找字符串名称对应的服务名,按照顺序将其注入到函数中。
    myModule.controller("MainCtrl", ["$log", "$window", function($l, $w) {}]);
    在这个例子中,$log, $windows是AngularJS自带的两个服务,在数组中通过名称声明后,会被注入到函数的两个参数中。
    比较常用的AngularJS自带的服务有:$window, $location, $http等

    从上面的例子中可以看出,AngularJS的设计思想就是不要在函数中自己去实例化或者通过其它途径来获取服务的实例,而是声明需要的对象,由AngularJS来注入具体的实例。

    创建自己的服务
    什么时候应该创建服务,而不是controller呢?
    1。 需要重用的时候
    2。需要保留应用级的状态。这是非常重要的一点,controller是会不断地被创建和销毁的,如果需要保存应用级的状态,就需要使用service
    3。和页面显示无关
    4。需要和第三方服务整合
    5。缓存

    服务是会被延迟加载的,也就是说只有在第一次被引用的时候,才会被创建。
    服务将会被定义一次,也只会被实例化一次。


    云自无心水自闲 2015-02-09 19:28 发表评论


沪ICP备19023445号-2号
友情链接