gpt4 book ai didi

angularjs - 如何在 Angular 中的服务和工厂中定义构造函数?

转载 作者:行者123 更新时间:2023-12-02 22:49:09 24 4
gpt4 key购买 nike

我对 Angular 有点熟悉。仍在学习过程中。使用 ng 版本 1.4.8。所以我想知道如何在服务和工厂中定义构造函数。

这是一个示例服务。现在告诉我如何在服务或工厂中定义构造函数?

angular.module('myApp').service('helloService',function($timeout){
this.sayHello=function(name){
$timeout(function(){
alert('Hello '+name);
},2000);
}
});

angular.module('myApp').controller('TestController',
function(helloService){
helloService.sayHello('AngularJS'); // Alerts Hello AngularJS
});

最佳答案

传递给 .service 的函数是用 new 调用的,因此它基本上已经是一个构造函数了。它是一个“构造函数”,它隐式返回一个对象,即单例:

angular.module('myApp').service('helloService',function($timeout){
// This constructor function implicitly returns an object. It is called
// only once by Angular to create a singleton.

this.sayHello = function(name) {
// etc
}
});

只是为了说明,如果您将 ES6 类传递给 .service (它有一个构造函数)而不是构造函数,则在创建单例时将调用该构造函数:

class HelloService {
constructor($timeout) {
// Called once when the singleton is created
}

sayHello(name) {
// etc
}
}

angular.module('myApp').service('helloService', HelloService);

使用.factory 类似,但它不会用new 调用。因此,在这种情况下使用的函数必须显式返回一个单例对象:

angular.module('myApp').factory('helloService',function($timeout){
// This factory function explicitly returns an object. It is called
// only once by Angular to create a singleton.

return {
sayHello: function(name) {
// etc
}
};
});

编辑:正如@Vladimir Zdenek提到的,这些“构造函数”不能用于外部配置单例。但是,我将问题解释为“在哪里可以放置创建单例时运行的代码?”。单例可能需要初始化数据,这样初始化就可以在“构造函数”中进行。

关于angularjs - 如何在 Angular 中的服务和工厂中定义构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499471/

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