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