2015-03-13 55 views
3

我遇到过很多文章,展示了如何将业务逻辑从控制器中分离出来,并将它们保存在不同的层中。至于角度,我们添加所有的逻辑在我们的服务,工厂等在AngularJS中将业务逻辑从控制器中分离出来

但我已经遇到了下面的代码行

angular.module('myApp').controller(function($scope,$userService) {  
    $scope.users = $userService.get('/users');  
    $scope.add = function() { 
    // do something 
    };  
}); 

,人们仍然认为,我们仍然在增加我们的逻辑控制器。如果这是真的,那么在我的控制器中初始化数据的最佳方法是什么,以便我可以避免在控制器中使用逻辑,或者可以帮助我实现这些逻辑的任何最佳实践。

P.S我正在严格要求Angular的建议。

+0

我只是试图绑定控制器(数据和函数)中的数据,所有其他逻辑保持服务。我认为只有在页面上显示数据的逻辑。 – Mikalai 2015-03-13 13:24:48

回答

2

在给出的代码示例中,您可以使用资源(https://docs.angularjs.org/api/ngResource/service/ $ resource)来抽象URL详细信息。然后,代码可能如下:

angular.module('myApp').controller(function($scope,Users) {  
    $scope.users = Users.query();  
    $scope.add = function() { 
    // do something 
    };  
}); 

我假设的添加功能链接到与模板的NG击事件,这看起来不错在这种情况下。如果代替//做点什么有很多代码可能会被移入服务。

从AngularJS Docs摘自:

控制器是“类”或者是 负责提供支持模板 声明标记的应用程序的行为“构造函数”。

作为一个经验法则,如果它不是应用程序行为,例如更新模型,处理点击事件等,然后抽象成服务。

2

控制器中肯定存在“逻辑”,但逻辑应限于定义ViewModel并通过对View和Model中的事件作出反应来改变它。

该逻辑处理应用程序的状态或应用程序视图的一部分,控制器为其授权。

逻辑应该是而不是在控制器中与后端知识,操纵模型的数据,操纵View/DOM,业务逻辑不直接相关的数据是如何分级介绍。

您的示例没有问题,但"/users"部分除外,该部分可能受益于在服务中被抽象化。

相关问题