2014-02-17 64 views
0

最近我一直在與Angular交手,並試圖讓我的腦袋圍繞它構建的概念。到目前爲止,所有的一切都有點神祕,但我到了那裏!角度分離問題,何時使用服務和/或工廠?

無論如何,所以我使用Angular構建了我的網站的一小部分(它似乎適合用例,因爲我需要在瀏覽器上操作JavaScript對象)。

作爲這個過程的一部分,我需要添加一個對象到我的模型(點擊一個元素)。我花了一段時間才弄清楚如何做到這一點,但最終我得到了它的工作。

現在我結束了下面的代碼:

var stpApp = angular.module('stpApp', []); 

stpApp.controller('multiStopController', function ($scope, $compile, $http) { 
    $scope.inboundJourney = [{ 
     'DepartureAirport': '', 
      'DestinationAirport': '', 
      'DepartureDate': '', 
      'DepartureTime': 9, 
      'Class': 'Class' 
    }]; 

    $scope.addInboundJourney = function() { 
     $scope.inboundJourney.push({ 
      'DepartureAirport': '', 
       'DestinationAirport': '', 
       'DepartureDate': '', 
       'DepartureTime': 9, 
       'Class': '' 
     }); 
    } 
}); 

和一些標記:

<li ng-repeat="journey in inboundJourney"> 
    <input type="text" class="AirportName" ng-model="journey.DepartureAirport" /> 
</li> 
<p class="addMultiStop"><span title="Add a journey" ng-click="addInboundJourney()">+</span> 
</p> 

做一點更多的閱讀我看到越來越推出servicesfactories的概念。那麼我的addInboundJourney函數應該在服務還是工廠中,還是在控制器中可以正常工作?

如果在控制器中可以使用,建議何時使用服務和/或工廠?

+0

服務和工廠幾乎是一樣的,默認情況下是「單身人士」。如果您想將某些東西暴露給多個控制器,則使用服務/工廠。 – mpm

回答

2

這是相當主觀的問題。如果您需要處理多個控制器中的操作,並將其注入到控制器中,請將入站途徑操縱移入服務中。

如果你只是要操縱multiStopController中的入站旅程,那麼我會說你很好,像你一樣。

如果你發現有很多inboundJourneys操作的代碼(你可能想在multiStopController中做一些其他的事情,讓你的控制器變胖),那麼我會把它移出一個服務 - 不管我打算使用多少個控制器來使用這些功能。

+0

+1,好吧,先生。 –

0

分離考慮的問題時,最好創建一個服務或工廠來表示一個對象。該對象還將具有用於操縱數據的方法,例如, addInboundJourney(journey)

使用哪一個取決於您 - 一般來說,工廠在需要預初始化代碼時使用。