亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AngularJS:工廠和服務?

AngularJS:工廠和服務?

繁花不似錦 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);


查看完整回答
反對 回復 2019-12-07
  • 3 回答
  • 0 關注
  • 617 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號