2016-02-08 74 views
0

我開始學習AngularJS的基礎知識,看一些示例代碼:(?或最佳實踐,也許)AngularJS服務中返回{...}塊的用途是什麼?

'use strict'; 

angular.module('someModule') 
.factory('DateFormatter', function() { 
    var clean = function (date) { 
    return moment(date).format('YYYY-MM-DD'); 
    }; 

    return { 
    clean:clean 
    }; 
}); 

誰能告訴我,爲什麼有必要包括在底部的回報塊?它是否使外部代碼可以訪問clean()函數或類似的東西?

感謝

回答

0

通過使用工廠的方法,你幾乎告訴AngularJS,每當被請求的DateFormatter的對象(例如,通過依賴注入機構),但是應該執行傳遞給第二個參數factory(..., ...)的方法中,並提供該函數返回的對象而不是函數本身。

也就是說,Angular不會提供您定義的方法,而是該方法返回的對象。這幾乎是'工廠'這個詞的意思:'當我要求時爲我創建這個對象'。

如果返回的功能,一切會改變的是你將不得不自行調用該函數,以便它提供了一些值/對象,比如這個:

.controller(DateFormatter) { 
    // If Angular returned the function rather than it's returned value, 
    // you would have to do this in order to get access to the clean function: 
    (DateFormatter()).clean(); 
} 

在另一種意義上說,你認爲它使得clean函數可用是正確的。爲此,它還提供了一種封裝機制。如果你這樣做:

angular.module('someModule') 
.factory('DateFormatter', function() { 
    var clean = function (date) { 
    date = someHelperFunction(date); 
    return moment(date).format('YYYY-MM-DD'); 
    }; 

    var someHelperFunction(date) { 
    // do something here with date 
    }; 

    return { 
    clean:clean 
    }; 
}); 

那麼你就能夠從內部調用someHelperFunction功能,而不是從外面,因爲你沒有返回。

0

你還可寫

angular.module('someModule') 
.factory('DateFormatter', function() { 
    return { 
    clean: function (date) { 
     return moment(date).format('YYYY-MM-DD'); 
    }; 
    } 
}); 

這是完全一樣的事情。 但更大的功能與更多的代碼,第一個更具可讀性。所以是的,它只是最好的做法,但不是必需的

0

從角documentation on providers

工廠配方構造使用功能與零個或多個參數(這些都依賴於其他服務)的新服務。此函數的返回值是由此配方創建的服務實例。

在您的示例中,工廠正在返回一個具有.clean屬性的匿名對象。您聲明這些內容的順序無關緊要;你可以首先聲明返回值,或者首先聲明函數,或者聲明函數內聯;都會達到同樣的效果。

//form 1 
var clean = function(date) { 
    return moment(date).format('YYYY-MM-DD'); 
}; 

return { 
    clean: clean 
}; 

//form 2 
var service = { 
    clean: clean 
}; 

return service; 

function clean(date) { 
    return moment(date).format('YYYY-MM-DD'); 
}; 

//form 3 
return { 
    clean: function(date) { 
    return moment(date).format('YYYY-MM-DD'); 
    }; 
}; 

推薦形式是2,由約翰爸爸創造的流行style guide。原因在於,通過將可調用成員聲明爲頂層,您可以立即看到工廠將返回的內容,而無需掃描實現細節。

相關問題