javascript - Angular 上的关注点分离,何时使用服务和/或工厂?

标签 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>

多读一点,我看到了服务工厂的概念被引入。那么我的 addInboundJourney 函数应该在服务中还是工厂中,或者在 Controller 中是否可以,就像现在一样?

如果这在 Controller 中没问题,什么时候建议使用服务和/或工厂?

最佳答案

这是一个非常主观的问题。如果您需要在多个 Controller 中处理操作,请将 inboundJourney 操作移至一项服务中,并将其注入(inject)到 Controller 中。

如果您只想在 multiStopController 中操作 inboundJourneys,那么我想说您可以继续这样做。

但是,如果您发现有大量用于 inboundJourneys 操作的代码(您可能还想在 multiStopController 中执行其他一些操作,从而使您的 Controller 变得臃肿),那么我会将其移至服务中 - 无论如何我打算在许多 Controller 中使用该功能。

关于javascript - Angular 上的关注点分离,何时使用服务和/或工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21825815/

相关文章:

javascript - Auth laravel5-angular-material-starter 的本地存储

asp.net - 重构旧版 WebForms 应用程序以更好地分离关注点

javascript - 嵌入与包含 Javascript 进行 DOM 交互?

javascript - 将VueJS与Axios一起使用后响应数据消失

c# - 回发后清除隐藏的输入字段

javascript - ng-bind 工作正常,为什么 ng-bind-html 不工作

angularjs - Angular JS 单页应用程序中的神秘内存泄漏

javascript - Angular : controller-directive interaction with separation of concerns

php - HTML5 的 Canvas 可以处理在其中绘制的多个图像吗?

javascript - node.js/JavaScript 语法 - 向传递的参数添加额外的参数