繁花不似錦
2019-12-07 14:09:48
由于這仍然引起注意。自問了這個之后,我已經完成了一些AngularJS項目,對于我最常使用的項目factory,建立了一個對象并在最后返回了該對象。但是,我下面的說法仍然正確。編輯:我想我終于了解了兩者之間的主要區別,并且我有一個代碼示例來演示。我也認為這個問題與建議的重復問題有所不同。重復項表示該服務不可實例化,但是如果您按照我在下面的演示中進行設置,它實際上是可實例化的??梢詫⒎赵O置為與工廠完全相同。我還將提供代碼,顯示工廠在哪里進行故障轉移服務,而其他答案似乎都沒有。如果我像這樣設置VaderService(即作為服務):var module = angular.module('MyApp.services', []);module.service('VaderService', function() { this.speak = function (name) { return 'Join the dark side ' + name; }});然后在我的控制器中,我可以這樣做:module.controller('StarWarsController', function($scope, VaderService) { $scope.luke = VaderService.speak('luke'); });通過服務,將實例化注入到控制器中的VaderService,因此我可以調用VaderService.speak,但是,如果將VaderService更改為module.factory,則控制器中的代碼將不再起作用,這是主要區別。使用factory時,不會實例化注入到控制器中的VaderService ,這就是為什么在設置工廠時需要返回一個對象的原因(請參閱問題中的示例)。但是,您可以使用與建立工廠完全相同的方式來設置服務(IE使它返回一個對象),并且服務的行為與工廠完全相同有了這些信息,我認為沒有理由使用工廠而不是服務,服務可以做工廠可以做的一切,甚至更多。下面的原始問題。我知道這已經被要求很多次,但是我真的看不到工廠和服務之間的功能差異。我已經閱讀了本教程:http : //blogs.clevertech.biz/startupblog/angularjs-factory-service-provider它似乎給出了一個很好的解釋,但是,我將我的應用設置如下:index.html<!DOCTYPE html><html> <head> <title>My App</title> <script src="lib/angular/angular.js"></script> <script type="text/javascript" src="js/controllers.js"></script> <script type="text/javascript" src="js/VaderService.js"></script> <script type="text/javascript" src="js/app.js"></script> </head> <body ng-app="MyApp"> <table ng-controller="StarWarsController"> <tbody> <tr><td>{{luke}}</td></tr> </tbody> </table> </body></html>app.js:angular.module('MyApp', [ 'MyApp.services', 'MyApp.controllers']);controllers.js:var module = angular.module('MyApp.controllers', []);module.controller('StarWarsController', function($scope, VaderService) { var luke = new VaderService('luke'); $scope.luke = luke.speak();});VaderService.jsvar module = angular.module('MyApp.services', []);然后重新加載index.html(我確定我清空了緩存并進行了重新加載)。它的工作原理與module.factory 完全相同。那么兩者之間真正的功能區別是什么?
3 回答

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
提供服務
從技術上講,它們是同一件事,實際上是使用服務provider功能的不同表示法。$provide
如果您使用的是類:則可以使用服務符號。
如果使用的是對象,則可以使用工廠符號。
該唯一的區別service和factory 符號是服務是新-ED和工廠不。但是對于其他所有事物,它們的外觀,氣味和行為均相同。同樣,它只是$ provide.provider函數的簡寫。
// Factory
angular.module('myApp').factory('myFactory', function() {
var _myPrivateValue = 123;
return {
privateValue: function() { return _myPrivateValue; }
};
});
// Service
function MyService() {
this._myPrivateValue = 123;
}
MyService.prototype.privateValue = function() {
return this._myPrivateValue;
};
angular.module('myApp').service('MyService', MyService);
添加回答
舉報
0/150
提交
取消