从互联网上的不同资源中学习角度让人感到困惑。每个人都使用不同类型的模式来编写函数。请注意这个.provider concept
我尝试.provider
有4种不同的模式,而且都在运作
模式A :使用return
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:使用this
并区分$ 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() with .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; }
};
});
然后
app.config(['alphaProvider',function(alphaProvider) {
console.group('Checking Factory Pattern');
alphaProvider.$get().sayHello();
var cdata = alphaProvider.$get().getAllData();
console.log(cdata);
console.groupEnd();
}]);
为此创建了jsfiddle,请告诉我哪种方式正确/首选?
答案 0 :(得分:3)
模式A和B都是创建提供者/服务的正确方法。
传递给function
方法的provider()
是提供程序实例的构造函数。 Provider实例只是一个$get
方法的对象。您有两种选择如何实例化它:
this
语法并且不从构造函数(模式B )返回任何内容。在这种情况下,angular将创建一个提供者实例作为新的Object
并对其运行构造函数(绑定this
)。 模式C 是Inline Array Annotation - 一种指定组件/功能的依赖关系的方法。该数组应该包含依赖项的名称,后面跟着您希望它们注入的function
。可以与A和B两种方法一起使用。
<强>更新强>
正如 @estus 所指出的,B方法更有效,因为在A的情况下,新的Object
也被创建但从未使用过。