我最近一直在与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>
多做一些阅读我已经看到了services
和factories
的概念。我的addInboundJourney
函数应该在服务或工厂中,还是在控制器中就可以了,就像它现在一样?
如果控制器中没有问题,建议何时使用服务和/或工厂?
答案 0 :(得分:2)
这是一个非常主观的问题。如果需要在多个控制器中处理操作,并将其注入控制器,请将inboundJourney操作移动到服务中。
如果你只是想在multiStopController中操纵inboundJourneys,那么我会说你很高兴继续这样做。
但是如果你发现inboundJourneys操作的代码很多(你可能想在multiStopController中做一些其他事情,让你的控制器变胖),那么我会将它移到服务中 - 无论如何我打算在很多控制器中使用这些功能。
答案 1 :(得分:0)
考虑到关注点,最好创建一个服务或工厂来表示InboundJourney
对象。该对象还将具有用于操纵数据的方法,例如, addInboundJourney(journey)
。
使用哪一个取决于您 - 一般来说,在需要预初始化代码时使用工厂。