gpt4 book ai didi

javascript - Angular 不同类型的提供者配置

转载 作者:行者123 更新时间:2023-11-29 19:12:23 25 4
gpt4 key购买 nike

从 Internet 上的不同资源学习 Angular 确实令人困惑。每个人都使用不同类型的模式来编写函数。请对此有所了解 .provider concept

我已经尝试过使用 4 种不同模式的 .provider 并且都可以正常工作

模式 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;
};
});

pattern 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; }
};
});

然后

app.config(['alphaProvider',function(alphaProvider) {
console.group('Checking Factory Pattern');
alphaProvider.$get().sayHello();
var cdata = alphaProvider.$get().getAllData();
console.log(cdata);
console.groupEnd();
}]);

创建了一个 jsfiddle同样,请告诉我哪种方式是正确的/首选方式?

最佳答案

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

您传递给 provider() 方法的 function 是提供程序实例的构造函数。 Provider 实例只是一个带有 $get 方法的对象。关于如何实例化它,您有两种选择:

  • 从构造函数中显式返回提供者实例(模式 A)
  • 使用this 语法并从构造函数返回任何内容(模式B)。在这种情况下,angular 将创建一个提供者实例作为一个新的 Object 并针对它运行构造函数(将 this 绑定(bind)到它)。

模式 CInline Array Annotation - 一种指定组件/功能依赖项的方法。该数组应包含依赖项的名称,后跟要注入(inject)它们的 function。可以与 A 和 B 方法一起使用。

更新

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

关于javascript - Angular 不同类型的提供者配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37835626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com