我在哪里放置常规函数,Angularjs

时间:2016-03-29 08:57:32

标签: javascript angularjs

我进入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() {};
        }]);

3 个答案:

答案 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功能更像控制器特定功能,因为它会清除某些模型值。将来,您可能希望在该函数中添加更多条件和操作,如果您使用服务,则可能会产生复杂的代码。

如果该功能是“不会改变功能”。使用服务是很好的方法。 (代码重用性和所有),但除此之外,将所有逻辑包装在一个地方更好。 (把它写在控制器中)