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

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

服務公司對安古拉工廠

服務公司對安古拉工廠

aluckdog 2019-06-18 13:27:15
服務公司對安古拉工廠我都見過安古拉爾工廠()和angular.service()用于聲明服務;但是,i找不到 angular.service官方文件里的任何地方。這兩種方法有什么區別?哪一個應該用來做什么(假設他們做不同的事情)?
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

angular.service('myService', myServiceFunction);
  angular.factory('myFactory', myFactoryFunction);

我很難把我的頭繞在這個概念上,直到我這樣對自己說:

服務*功能你寫的將會是新的-編輯:

  myInjectedService  <----  new myServiceFunction()

工廠*功能(構造函數)您編寫的被調用:

  myInjectedFactory  <---  myFactoryFunction()

你做什么取決于你自己,但有一些有用的模式.

比如寫一個服務函數公開公共API:

function myServiceFunction() {
  this.awesomeApi = function(optional) {
    // calculate some stuff
    return awesomeListOfValues;
  }}---------------------------------------------------------------------------------
  // Injected in your controller$scope.awesome = myInjectedService.awesomeApi();

或者使用工廠函數公開公共API:

function myFactoryFunction() {
  var aPrivateVariable = "yay";

  function hello() {
    return "hello mars " + aPrivateVariable;
  }

  // expose a public API
  return {
    hello: hello  };}---------------------------------------------------------------------------------
    // Injected in your controller$scope.hello = myInjectedFactory.hello();

或者使用工廠函數返回構造函數:

function myFactoryFunction() {
    return function() {
        var a = 2;
        this.a2 = function() {
            return a*2;
        };
    };}---------------------------------------------------------------------------------
    // Injected in your controllervar myShinyNewObject = new myInjectedFactory();$scope.four = myShinyNewObject.a2();

用哪一個?.

你可以用這兩種方法完成同樣的事情。但是,在某些情況下,工廠為您提供了更多的靈活性,以創建一個具有更簡單語法的可注入性。這是因為MyInjectedService必須始終是對象,myInjectedFactory可以是對象、函數引用或任何值。例如,如果您編寫了一個服務來創建構造函數(如上面的示例所示),則必須實例化它,如下所示:

var myShinyNewObject = new myInjectedService.myFunction()

可以說,這比這更不可?。?/trans>

var myShinyNewObject = new myInjectedFactory();

(但首先您應該小心使用這種模式,因為新的-控制器中的ing對象創建了難以模擬用于測試的硬跟蹤依賴項。與其使用服務,不如讓服務為您管理對象集合。new()(詭計多端)


還有一件事,他們都是單身.。

還請記住,在這兩種情況下,角是幫助您管理單例。無論您在何處注入服務或函數,也不管注入多少次,您都將得到對同一個對象或函數的相同引用。(工廠只返回數字或字符串之類的值時除外。在這種情況下,您將始終得到相同的值,而不是引用。)


查看完整回答
反對 回復 2019-06-18
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

簡單地說.。

// Serviceservice = (a, b) => {
  a.lastName = b;
  return a;};// Factoryfactory = (a, b) => Object.assign({}, a, { lastName: b });

const fullName = { firstName: 'john' };


// Service

const lastNameService = (a, b) => {

  a.lastName = b;

  return a;

};

console.log(lastNameService(fullName, 'doe'));


// Factory

const lastNameFactory = (a, b) => 

  Object.assign({}, a, { lastName: b })

console.log(lastNameFactory(fullName, 'doe'));


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 525 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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