角度分离,何时使用服务和/或工厂?

时间:2014-02-17 09:57:33

标签: javascript angularjs separation-of-concerns

我最近一直在与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函数应该在服务或工厂中,还是在控制器中就可以了,就像它现在一样?

如果控制器中没有问题,建议何时使用服务和/或工厂?

2 个答案:

答案 0 :(得分:2)

这是一个非常主观的问题。如果需要在多个控制器中处理操作,并将其注入控制器,请将inboundJourney操作移动到服务中。

如果你只是想在multiStopController中操纵inboundJourneys,那么我会说你很高兴继续这样做。

但是如果你发现inboundJourneys操作的代码很多(你可能想在multiStopController中做一些其他事情,让你的控制器变胖),那么我会将它移到服务中 - 无论如何我打算在很多控制器中使用这些功能。

答案 1 :(得分:0)

考虑到关注点,最好创建一个服务或工厂来表示InboundJourney对象。该对象还将具有用于操纵数据的方法,例如, addInboundJourney(journey)

使用哪一个取决于您 - 一般来说,在需要预初始化代码时使用工厂。

相关问题