【发布时间】:2017-03-09 17:11:04
【问题描述】:
我有一个适用于工厂和服务的代码: 我很困惑在什么情况下我需要使用哪个代码。
这段代码使用service在console.log中输出my value
var mod = angular.module("MyModule", []);
mod.service("myService", function() {
console.log("this is service");
return {
getvalue : function() {
return "My value";
}
};
});
mod.controller("MyController", function(myService) {
console.log("MyController - myFactory: " + myService.getvalue());
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyModule">
<div ng-controller="MyController"></div>
</div>
此代码我刚刚将mod.service() 更改为mod.factory(),其余代码相同,它在console.log 中使用factory 输出my value
var mod = angular.module("MyModule", []);
mod.service("myFactory", function() {
console.log("this is Factory");
return {
getvalue : function() {
return "My value";
}
};
});
mod.controller("MyController", function(myFactory) {
console.log("MyController - myFactory: " + myFactory.getvalue());
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyModule">
<div ng-controller="MyController"></div>
</div>
【问题讨论】:
-
如果函数创建并返回一个对象(服务),那么它是一个工厂,你应该使用 factory()。如果该函数是初始化
this并且不返回任何内容的构造函数,则使用service()。您实际上可以将服务与返回服务的函数一起使用,但这只是因为 JavaScript 构造函数可以做一些丑陋的事情。 -
当我们使用工厂时,我们只是创建一个对象,为其添加属性,然后返回相同的对象。当我们将此工厂传递给控制器时,对象上的这些属性现在将在该控制器中可用.如果使用对象,我们可以使用工厂提供者。当我们使用 Service 时,我们只是使用“new”关键字进行实例化,您将向“this”添加属性,服务将返回“this”。当我们将服务传递给控制器时,“this”上的那些属性现在将在该控制器上可用。如果与类一起使用,服务会更好
标签: angularjs angular-services angular-factory