为了账号安全,请及时绑定邮箱和手机立即绑定

AngularJS:工厂和服务?

AngularJS:工厂和服务?

繁花不似锦 2019-12-07 14:09:48
由于这仍然引起注意。自问了这个之后,我已经完成了一些AngularJS项目,对于我最常使用的项目factory,建立了一个对象并在最后返回了该对象。但是,我下面的说法仍然正确。编辑:我想我终于了解了两者之间的主要区别,并且我有一个代码示例来演示。我也认为这个问题与建议的重复问题有所不同。重复项表示该服务不可实例化,但是如果您按照我在下面的演示中进行设置,它实际上是可实例化的。可以将服务设置为与工厂完全相同。我还将提供代码,显示工厂在哪里进行故障转移服务,而其他答案似乎都没有。如果我像这样设置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);


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 559 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信