Javascript angular中不同类型的提供程序配置

Javascript angular中不同类型的提供程序配置,javascript,angularjs,angular-providers,Javascript,Angularjs,Angular Providers,从互联网上的不同资源学习确实令人困惑。每个人都使用不同类型的模式来编写函数。请对此进行说明 我用4种不同的模式尝试了.provider,所有模式都正常工作 模式A:在返回中使用所有函数 app.provider('other', function() { name ="Default"; return { $get: function () { return { sayHe

从互联网上的不同资源学习确实令人困惑。每个人都使用不同类型的模式来编写函数。请对此进行说明

我用4种不同的模式尝试了
.provider
,所有模式都正常工作

模式A:在
返回中使用所有函数

app.provider('other', function() {
    name ="Default";
    return {
        $get: function () {
                return {
                    sayHello: function () { console.log('provider example say my name is :' + name )}
                }
        },
        setName: function (newName) {
            name = newName;
        }
    };
}); 

模式B:使用
并区别$get和其他方法

app.provider('other', function() {
    this.name ="Default";
    this.$get = function () {
        var name = this.name;
        return {
            sayHello: function () { console.log('provider example say my name is :' + name )}
        };
    };

    this.setName = function(name) {
        this.name = name;
    };
});
模式C:也可以在返回的函数之前找到使用数组的地方

this.$get = [function () {
        var name = this.name;
        return {
            sayHello: function () { console.log('provider example say my name is :' + name )}
        }
    }];

厄帕德 模式D:使用.factory,然后是functionNameProvider.$get.methodName()和.config

app.factory('alpha', function(){
        var c = ['Cadbury','Perk','Dairy Milk'];
        return {
            sayHello: function() { console.log('Hello, I am from Provider');},
            getAllData: function() { return c; }
        };
});
然后


创建a同样,请告诉我哪种方法正确/首选?

模式a和B都是创建提供者/服务的正确方法

传递给
provider()
方法的
函数是provider实例的构造函数。提供者实例只是一个具有
$get
方法的对象。关于如何实例化它,您有两个选项:

  • 从构造函数显式返回提供程序实例(模式A)
  • 使用
    语法并从构造函数中不返回任何内容(模式B)。在这种情况下,angular将创建一个提供程序实例作为新的
    对象
    ,并对其运行构造函数(将
    绑定到它)
模式C是一种指定组件/函数依赖关系的方法。数组应该包含依赖项的名称,后跟要注入它们的
函数。可与A和B方法一起使用

更新


正如@estus所指出的,B方法更有效,因为在A的情况下,新的
对象也被创建,但从未使用过。

这不是真的:“在这种情况下,angular将创建一个提供者实例作为新对象”。在A和B中,
这个
实例已经创建,建议使用它,而不是将它扔给垃圾收集器。因此,B比A更“正确”。我看到了其他模式,并更新了问题。请引导我
app.config(['alphaProvider',function(alphaProvider) {
 console.group('Checking Factory Pattern');
 alphaProvider.$get().sayHello();
 var cdata = alphaProvider.$get().getAllData();
 console.log(cdata);
 console.groupEnd();
}]);