我有一个适用于工厂和服务的代码: 我很困惑在什么情况下我需要使用哪种代码。
此代码使用my value
service
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()
,其余代码相同,并使用my value
factory
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>
答案 0 :(得分:2)
This blog post值得成千上万的答案。
使用.factory()为我们提供了更多的力量和灵活性,而a .service()本质上是.factory()调用的“最终结果”。该 .service()通过在函数上调用new来给我们返回值, 这可能是限制性的,而.factory()在此之前是一步 编译过程,因为我们选择要实现的模式和 返回。
它解释了源代码级别的差异。
在现实生活中,我认为使用其中一种是一种品味问题。
来自Java,我喜欢.service
看起来像使用 this 的类。
答案 1 :(得分:1)
让我解释一下
服务为我们提供了一种方法,可以在应用程序的生命周期内保持数据并进行通信 以一致的方式跨控制器。 服务是单个对象,每个应用程序(通过$ injector)和lazyloaded只实例化一次 (仅在必要时创建)。它们提供了将这些方法结合在一起的接口 与特定功能有关。
此服务工厂函数负责生成单个对象或函数 此服务将在应用程序的生命周期内存在。当我们的Angular应用加载服务时, service将执行此函数并将返回的值保持为单例服务对象。 服务工厂函数可以是函数也可以是数组,就像我们创建的方式一样 控制器:
所以我希望您使用工厂进行核心操作,并从一个服务调用此工厂(您需要为此创建一个saporate服务),这样您就可以在应用程序中提供更多隔离。 强>
*使一家工厂像:
app.factory('memberServiceFactory', ['$http','$filter', function ($http,$filter) {
return {
getData: function (data) {
return {};
},
addData: function (file, formData) {
},
}
}]);
*制作一项服务,如:
app.service('memberListService', ['memberServiceFactory', function (memberServiceFactory){
this.getList = memberServiceFactory.getData;
this.addMember = memberServiceFactory.addData;
}]);
你可以在这里看到我从服务中调用工厂,你可以提供这样的封装。