我进入Angularjs。我想重新使用函数resetForm()
函数。我的问题是,我是否仍将其放入我的控制器$scope
或创建工厂或服务?
app.controller('testController', [
'$scope',
'testService',
function($scope, testService) {
$scope.addTestForm = function() {
var body = document.getElementsByTagName('body')[0];
if (!body.classList.contains('test__add')) {
body.classList.add('test__add');
}
};
//do I add my function here?
function name() {};
}]);
答案 0 :(得分:0)
如果要在多个控制器之间重复使用它,工厂或服务可能是共享它的最佳方式,而不会重复代码。然后,您可以从所有控制器中调用其中一个。
此模式的附加好处是,您不仅可以避免重复代码,还可以存储变量并共享这些变量。
两者都有效,但如果您无法选择哪一个,可以在Factory vs Service上阅读一些有趣的讨论。
答案 1 :(得分:0)
如果它是resetForm()
函数,那么我假设它正在处理DOM。我建议你在你的控制器中声明这个函数,因为你需要访问$scope
来重置表单字段(AngularJS中严格禁止直接访问DOM)。您可以参考下面的示例代码
app.controller('testController', [
'$scope',
'testService',
function($scope, testService) {
var resetForm = function() {
// your logic to reset form with help of $scope
};
$scope.addTestForm = function() {
var body = document.getElementsByTagName('body')[0];
if (!body.classList.contains('test__add')) {
body.classList.add('test__add');
}
};
}]);
注意:如果您不打算从模板文件中调用resetForm
,则不需要将$scope.resetForm
函数声明为{{1}}。< / p>
答案 2 :(得分:0)
事情是这样的:
如果该函数正在操作model
并且仅与该控制器相关,我们将在控制器中编写函数。
我们通常为向数据提供服务,例如来自异步API调用,以及控制器之间的共享数据。
在您的情况下,如果您需要实用程序功能,则可以使用service
,但resetForm
功能更像控制器特定功能,因为它会清除某些模型值。将来,您可能希望在该函数中添加更多条件和操作,如果您使用服务,则可能会产生复杂的代码。
如果该功能是“不会改变功能”。使用服务是很好的方法。 (代码重用性和所有),但除此之外,将所有逻辑包装在一个地方更好。 (把它写在控制器中)