1.factory

factory , 就是你提供一个方法, 该方法返回一个对象的实例, 对于 AngularJS 的 factory 来说, 就是先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象, 例如:

var app = angular.module('MyApp', []);
app.factory('MyFactory', function() {
    // define result object of factory.
    var result = {};
    // add some property and method to the object
    result.greeting = 'Hello from factory.';
    // return the object;
    return result;
});

最后 controller 拿到的就是 result 对象:

m1.controller('Aaa',['$scope','myFactory',function($scope,myFactory){
    
    console.log( myFactory);
    //这里的myFactory就是result对象
}]);

2.service

service 通过 new 运算符进行实例化, 可以认为是一个类型, 只要把属性和方法添加到 this 对象上即可, 不用显式返回什么对象, 比如下面的代码:

app.service('MyService', function() {
    this.greeting = 'Hello from service';
});

controller 拿到的对象就是上面代码中 this 指向的对象,

m1.controller('Aaa',['$scope','myService,function($scope,myService){
    
    console.log(myService);
    //这里的myService就是上面this指向的对象,相当于
   var myService = new myService();
}]);

 

3.provider

与 factory 和 service 稍有不同的是, provider 必须提供一个 $get 方法, $get 方法和 factory 要求是一致的, 即: 先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象, 例如:

app.provider('MyProvider', function() {
    this.$get = function() {
        var result = {};
        result.greeting = 'Hello from provider';
        return result;
    }
})

最后 controller 拿到的对象就是 provider 的 $get 方法返回的对象,

m1.provider('myRandomNum',function(){
    
    return {
        bolInt : false,
        int : function(argBol){
            if(argBol){
                this.bolInt = true;
            }
            else{
                this.bolInt = false;
            }
        },
        $get : function(){
            var This = this;
            return function(num1,num2){
                return This.bolInt ? Math.round(Math.random()*(num2 - num1)) + num1 : Math.random()*(num2 - num1) + num1;
            };
        }
    };
    
});

m1.config(['myRandomNumProvider',function(myRandomNumProvider){
    
    myRandomNumProvider.int(false);
    
}]);

m1.controller('Aaa',['$scope','myRandomNum',function($scope,myRandomNum){
    
    console.log( myRandomNum(-3,6) );
  //这里的 }]);

 

注意:

provider 的特殊之处就是可以在 module 启动时进行配置, 从而达到特殊的用途

m1.config(['myRandomNumProvider',function(myRandomNumProvider){
    
    myRandomNumProvider.int(false);
    
}]);

 

 参考:http://ju.outofmemory.cn/entry/121904

 

posted on 2015-11-23 11:13  toodeep  阅读(151)  评论(0编辑  收藏  举报